news 2026/4/23 13:09:10

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/4/23 11:27:02

多云测试的智能调度方案

1 方案概述 1.1 背景与挑战 随着企业数字化转型加速,多云架构已成为现代软件开发的标配环境。测试团队面临异构资源管理复杂、环境部署效率低下、成本控制精度不足三大核心挑战。传统单云测试模式在跨云兼容性验证、突发流量承载等方面显现出明显局限性。 1.2 智…

作者头像 李华
网站建设 2026/4/23 2:12:36

vue基于Spring Boot的个性化服装推荐系统的服装销售商城系统_x5ks108j

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

作者头像 李华
网站建设 2026/4/23 0:06:46

当Adaboost遇上SVM:时间序列预测的另类打开方式

基于支持向量机的Adaboost时间序列预测 SVM Adaboost时间序列 利用交叉验证抑制过拟合问题 matlab代码,注:要求 Matlab 2018B 及以上版本 注:采用 Libsvm 工具箱(无需安装,可直接运行),仅支持 W…

作者头像 李华
网站建设 2026/4/23 12:47:21

DevOps中的测试文化构建:从工具到思维的全面转型

随着DevOps实践的普及,软件开发周期不断缩短,自动化工具如CI/CD(持续集成/持续交付)已成为标配。然而,许多组织仍将测试视为开发后的孤立环节,导致质量瓶颈和交付延迟。真正的DevOps测试文化强调“质量是每…

作者头像 李华
网站建设 2026/4/23 13:00:07

挤爆字节服务器的Agent到底啥水平?Coze一手实测来了

这个让字节服务器“压力山大”的Agent,到底是真的技术突破,还是营销噱头?我用三天时间把它扒了个底朝天。前几天朋友圈被Coze的Agent刷屏了,听说它把字节的服务器都挤爆了。作为技术博主,我第一反应是:又一…

作者头像 李华
网站建设 2026/4/23 4:55:57

前端性能优化实战:从3秒到300ms的加载速度提升

前言 用户体验的核心是速度。我们的产品页面加载时间曾经高达3秒,用户流失率居高不下。经过两个月的优化,我们将加载时间降到了300ms,用户留存率提升了40%。 这篇文章分享我们的优化过程和实战经验。 一、问题诊断:找到性能瓶颈…

作者头像 李华