- 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
redis的hash数据结构底层简记
背帆2024-02-22 20:44
相关推荐
Greedy Alg7 小时前
LeetCode 239. 滑动窗口最大值闪电麦坤958 小时前
数据结构:排序算法的评判标准(Criteria Used For Analysing Sorts)Mercury_Lc9 小时前
【链表 - LeetCode】25. K 个一组翻转链表叫我阿柒啊10 小时前
Java全栈开发面试实战:从基础到微服务的深度探索离越词15 小时前
C++day1作业凤年徐15 小时前
【数据结构与算法】LeetCode 20.有效的括号道剑剑非道16 小时前
VxWorks 核心数据结构详解 【消息队列、环形缓冲区、管道、FIFO、双缓冲区、共享内存】东皇太星17 小时前
模运算(密码学/数论/算法)chen_note17 小时前
Redis集群介绍——主从、哨兵、集群Mercury_Lc19 小时前
【贪心 或 DFS - 面试题】小于n最大数