redis的hash数据结构底层简记

  • hash:k和v都是string的hash表。
    • HSET(设置集合数据,4.0之前只能设置1个,之后可以设置多个),HSETNX(若k不存在则设置对应v),HDEL(删除指定kv,可以一次删除多个),DEL(删除Hash对象),HMSET(设置多个kv,4.0之后废弃),HGETALL(查找全部数据),HGET(查询k对应的v),HLEN(查找Hash中的元素总数),HSCAN(从指定位置查询一定量数据,ziplist较小会全部返回)。
    • hash数据量较小使用ziplist存储,数据量大时使用hashtable存储(区别set使用的hashtable的value是null)。
  • hashtable:底层dict里面有ht2字段,ht里是两个结构体dictht,kv数据存储在dictht的table字段指向的dictEntry链表(拉链法头插法)中。
    • 哈希掩码与哈希值相与确定该值在hashtable位置
    • 负载因子=used/size,负载因子大于等于1在不执行bgsave和bgrewriteaof时会扩容,负载因子大于5必须扩容。负载因子小于0.1缩容。
    • 扩容为新表ht1分配大于used二倍的最小2的次方幂,缩容分配新表大于used最小的2的次方幂。
    • 渐进rehash扩缩容,对ht0元素操作才将ht0rehashidx++处元素转移到ht1,迁移完成后交换两链表指针后在ht1新建空表并rehashidx设为-1
相关推荐
我不会起名字3221 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
CS创新实验室7 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1017 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
毕业设计7038 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
从小白到软工9 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん9 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
haluhalu.10 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
垆边人似月.10 小时前
幻兽防御战(贪心算法)
数据结构·算法
DongQiShanRen10 小时前
六根硬件映射(下):物理闭环五步法,抽一条已实装的看
大数据·jvm·人工智能·算法·rust·哈希算法·集成学习
用户0942485680310 小时前
第1章:Redis 术语全景与单线程工作原理
redis·快应用·源码阅读