diff --git a/notes/Redis - 进阶.md b/notes/Redis - 进阶.md index bd5066ac..fd3e12a8 100644 --- a/notes/Redis - 进阶.md +++ b/notes/Redis - 进阶.md @@ -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 将所有时间事件都放在一个无序链表中,通过遍历整个链表查找出已到达的时间事件,并调用相应的事件处理器。 diff --git a/notes/pics/redis-rehash.png b/notes/pics/redis-rehash.png index 24b4580c..19f9d540 100644 Binary files a/notes/pics/redis-rehash.png and b/notes/pics/redis-rehash.png differ