Redis 的渐进式 rehash 是在进行哈希表扩容时采用的一种策略,它允许哈希表在进行扩容的同时仍然可以进行正常的读写操作,而不会阻塞整个 Redis 服务。
渐进式rehash过程:
- 为新哈希表分配空间:当哈希表需要扩容时,Redis 会创建一个新的更大的哈希表,通常将当前哈希表的大小翻倍。
- 将新哈希表设置为主哈希表:将新创建的哈希表设置为主哈希表,并将服务器的 rehashidx 属性设为 0,表示 rehash 过程从索引为 0 的哈希表节点开始。
- 在后台逐步迁移数据:Redis 在后台以异步的方式逐步将旧哈希表中的数据迁移到新哈希表。每次迁移一小部分数据,避免对整个数据集进行一次性的复制。
- 逐步更新 rehashidx:每次迁移完成后,服务器会逐步增加 rehashidx 的值,表示下次从旧哈希表的下一个索引位置开始继续迁移。
- 渐进式 rehash 完成:当 rehashidx 的值增加到哈希表的大小时,表示整个数据集已经迁移完成,新哈希表取代了旧哈希表,rehash 过程完成。
优点:
- 非阻塞:渐进式 rehash 过程不会阻塞对哈希表的读写操作,使得 Redis 在扩容过程中依然能够提供服务。
- 逐步迁移:数据迁移是逐步进行的,每次只迁移一小部分数据,避免了一次性大规模的数据复制。
© 版权声明
本站文章由不念博客原创,未经允许严禁转载!
THE END