- 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
redis的hash数据结构底层简记
背帆2024-02-22 20:44
相关推荐
2501_933923252 小时前
redis:string类型常见命令黄连木笛2 小时前
不改 Redis Insight 原有代码,把它汉化了:DOM 整段匹配 + XHR 拦截 + asar 重打包时间的拾荒人4 小时前
Redis 哨兵(Sentinel)详解:原理、选举机制与实战部署黄连木笛4 小时前
Redis Insight 汉化教程:Windows / macOS / Linux 设置中文界面(附繁體、教程汉化、关闭自动更新)岑梓铭4 小时前
《考研408数据结构》第八章(排序)复习笔记时间的拾荒人17 小时前
Redis 主从复制详解:配置实操 + 原理机制小林ixn1 天前
别再全量塞历史了:用 Redis 给 Agent 装上「短期记忆」笑容掩饰我的失落1 天前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件nice_lcj5201 天前
LRU 缓存入门:它是什么、怎么用、面试怎么手写꧁细听勿语情꧂1 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序