Update Redis - 进阶.md

重新绘制 redis-rehash 配图,补充字典缩容条件与渐进式 rehash 迁移细节,对时间事件描述进行文字校对。
This commit is contained in:
CyC2018
2026-10-30 20:18:47 +08:00
parent 4716804bdc
commit 269fe86458
2 changed files with 4 additions and 4 deletions
+4 -4
View File
@@ -28,8 +28,8 @@
- 字典中有两张哈希表 ht_table[0] 和 ht_table[1],平时只用 ht_table[0];
- 键的数量达到桶数时扩容,ht_table[1] 的大小为不小于键数加 1 的 2 的幂;有子进程在执行 BGSAVE 或 AOF 重写时,为了减少写时复制的内存页,要达到桶数的 4 倍才扩容;
- 键的数量不超过桶数的 1/8 时缩容,过程相同;
- rehashidx 记录迁移到了哪个桶,之后每次对这个字典增删改查,都顺便把一个桶中的所有键迁移到 ht_table[1],serverCron 也会定期花不超过 1 毫秒继续迁移;
- 键的数量不超过桶数的 1/8 时缩容,有子进程时要降到 1/32 才缩容,迁移过程与扩容相同;
- rehashidx 记录迁移到了哪个桶,之后每次对这个字典增删改查,都顺便把一个桶中的所有键迁移到 ht_table[1]:访问的键所在的旧桶还没迁移时迁移这个桶,否则迁移 rehashidx 指向的桶;serverCron 也会定期花约 1 毫秒继续迁移;
- 迁移期间新写入的键只放入 ht_table[1],查找和删除时两张表都可能要查;
- 全部迁移完成后,ht_table[1] 变为 ht_table[0],rehashidx 恢复为 -1。
@@ -55,8 +55,8 @@ Redis 基于 Reactor 模式开发了自己的网络事件处理器,使用 I/O
时间事件又分为:
- 定时事件:是让一段程序在指定的时间之内执行一次;
- 周期性事件:是让一段程序每隔指定时间就执行一次。
- 定时事件:让一段程序在指定的时间执行一次;
- 周期性事件:让一段程序每隔指定时间就执行一次。
Redis 将所有时间事件都放在一个无序链表中,通过遍历整个链表查找出已到达的时间事件,并调用相应的事件处理器。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

After

Width:  |  Height:  |  Size: 184 KiB