Redis 渐进式 Rehash 可视化

一步步看懂 Redis Hash 如何从 ht[0] 平滑迁移到 ht[1]

① 正常运行
② 触发扩容
③ 渐进迁移
④ 完成 Rehash

🤔 为什么需要扩容?

扩容前 — 拥挤的哈希表

负载因子 = 元素数 / 桶数 > 1,多个 key 挤在同一个桶里形成链表,查找退化为 O(n),性能急剧下降

扩容后 — 宽松的哈希表

桶数翻倍,元素重新分散,链表长度缩短,查找回到 O(1),内存与性能重新平衡

💡
当前状态:ht[0] 正常运行中。点击「触发扩容」开始渐进式 Rehash 演示。
1.50
负载因子
0%
Rehash 进度
rehashidx
4 / 0
ht[0] / ht[1] 桶数
Rehash 进度 0%
📦 ht[0] — 旧表 size=4, used=6
🆕 ht[1] — 新表 未分配

📖 当前阶段说明

Redis 的字典(dict)内部使用两个哈希表:ht[0]ht[1]

平时只有 ht[0] 在工作,ht[1] 处于未分配状态。

当负载因子(used / size)超过阈值时,Redis 会触发扩容,分配一个更大的 ht[1],然后渐进式地把 ht[0] 的元素搬过去。

[初始化] Redis dict 初始化完成,ht[0] 有 4 个桶、6 个元素