news 2026/3/2 12:42:18

Redis原理篇-Dict的rehash

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis原理篇-Dict的rehash

**

不管是扩容还是收缩,必定会创建新的哈希表,导致哈希表的size和sizemask变化,而key的查询与sizemask有关。因此必须对哈希表中的每一个key重新计算索引,插入新的哈希表,这个过程称为rehash。过程是这样的:

Dict的rehash并不是一次性完成的。试想一下,如果Dict中包含数百万的entry,要在一次rehash完成,极有可能导致主线程阻塞。因此Dict的rehash是分多次、渐进式的完成,因此称为渐进式rehash。流程如下:

  1. 计算新hash表的realeSize,值取决于当前要做的是扩容还是收缩:
    1. 如果是扩容,则新size为第一个大于等于dict.ht[0].used + 1的2^n
    2. 如果是收缩,则新size为第一个大于等于dict.ht[0].used的2^n (不得小于4)
  2. 按照新的realeSize申请内存空间,创建dictht,并赋值给dict.ht[1]。让dict字典同时持有 ht[0] 和 ht[1] 两个哈希表。
  3. 设置dict.rehashidx = 0,标示开始rehash

可以把rehashidx理解成 进行 渐进式 Rehash 时的“进度条”

  1. 将dict.ht[0]中的每一个dictEntry都rehash到dict.ht[1]
  2. 在rehash进行期间,每次对字典执行添加、删除、查找或者更新操作时,会先检查dict.rehashidx是否大于-1,然后程序除了执行指定的操作以外,还会顺带将ht[0]哈希表在 rehashidx索引(table[rehashidx]桶上的链表)上的所有键值对rehash到ht[1]上,当rehash工作完成之后,将rehashidx属性的值增一,表示下一次要迁移链表所在桶的位置。直到dict.ht[0]的所有数据都rehash到dict.ht[1]
  3. 将dict.ht[1]赋值给dict.ht[0],给dict.ht[1]初始化为空哈希表,释放原来的dict.ht[0]的内存
  4. **将rehashidx赋值为-1,代表rehash结束
  5. 在rehash过程中,新增操作,则直接写入ht[1],查询、修改和删除则会在dict.ht[0]和dict.ht[1]依次查找并执行。这样可以确保ht[0]的数据只减不增,随着rehash最终为空**


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 20:26:51

计算机考研408【计算机网络】核心知识点总结

计算机网络作为考研408的重要组成部分,占总分约25分,由选择题和综合应用题构成。掌握计算机网络的基本概念、原理和方法是备考的关键 ,尤其要理解OSI参考模型与TCP/IP模型的对应关系,以及各层协议的工作原理。本文将系统梳理计算机…

作者头像 李华
网站建设 2026/3/1 0:36:14

vue基于Spring Boot的公务员考试交流平台的应用和研究_729q3563

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/3/1 15:08:17

AI 写论文哪个软件最好?别再被 “伪智能” 糊弄!多数工具只凑功能,真正能从开题到查重闭环交付的,唯有虎贲等考 AI 这款 “靠谱学术搭子”

📚 论文季打开应用商店,“AI 一键写论文”“免费查重降重” 的工具铺天盖地,但用过就知道:多数是 “伪智能” 凑功能 —— 选题老套无创新、文献无法溯源、降重后语句不通,还要在选题工具、文献软件、查重平台间来回切…

作者头像 李华
网站建设 2026/2/25 14:27:57

vue基于Spring Boot的高校学习讲座推荐系统_kh370h5z

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华