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里面有ht[2]字段,ht里是两个结构体dictht,kv数据存储在dictht的table字段指向的dictEntry链表(拉链法头插法)中。
    • 哈希掩码与哈希值相与确定该值在hashtable位置
    • 负载因子=used/size,负载因子大于等于1在不执行bgsave和bgrewriteaof时会扩容,负载因子大于5必须扩容。负载因子小于0.1缩容。
    • 扩容为新表ht[1]分配大于used二倍的最小2的次方幂,缩容分配新表大于used最小的2的次方幂。
    • 渐进rehash扩缩容,对ht[0]元素操作才将ht[0][rehashidx++]处元素转移到ht[1],迁移完成后交换两链表指针后在ht[1]新建空表并rehashidx设为-1
相关推荐
仙俊红2 小时前
LeetCode487周赛T2,删除子数组后的最终元素
数据结构·算法
Leon-zy9 小时前
Redis7.4.5 主备冗余+哨兵模式部署
redis·哨兵模式·主备模式
Tingjct11 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
C雨后彩虹11 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
打工的小王12 小时前
redis(四)搭建哨兵模式:一主二从三哨兵
数据库·redis·缓存
飞机和胖和黄12 小时前
考研之王道C语言第三周
c语言·数据结构·考研
达文汐12 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗12 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
Gorgous—l12 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
奋进的芋圆13 小时前
Spring Boot 实现三模安全登录:微信扫码 + 手机号验证码 + 邮箱验证码
spring boot·redis·微信