mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-03 04:43:44 +00:00
Update Redis - 进阶.md
补充字典扩容与缩容阈值的版本差异。
This commit is contained in:
+1
-1
@@ -28,7 +28,7 @@
|
||||
|
||||
- 字典中有两张哈希表 ht_table[0] 和 ht_table[1],平时只用 ht_table[0];
|
||||
- 键的数量达到桶数时扩容,ht_table[1] 的大小为不小于键数加 1 的 2 的幂;有子进程在执行 BGSAVE 或 AOF 重写时,为了减少写时复制的内存页,要达到桶数的 4 倍才扩容;
|
||||
- 键的数量不超过桶数的 1/8 时缩容,有子进程时要降到 1/32 才缩容,迁移过程与扩容相同;
|
||||
- 键的数量不超过桶数的 1/8 时缩容,有子进程时要降到 1/32 才缩容,迁移过程与扩容相同。这些阈值是 Redis 7.4 的值(dict.c);7.2 及以前有子进程时,键数除以桶数的整数商要大于 5 才扩容,没有子进程时使用率低于 10% 才缩容;
|
||||
- rehashidx 记录迁移到了哪个桶,之后每次对这个字典增删改查,都顺便把一个桶中的所有键迁移到 ht_table[1]:访问的键所在的旧桶还没迁移时迁移这个桶,否则迁移 rehashidx 指向的桶;serverCron 也会定期花约 1 毫秒继续迁移;
|
||||
- 迁移期间新写入的键只放入 ht_table[1],查找和删除时两张表都可能要查;
|
||||
- 全部迁移完成后,ht_table[1] 变为 ht_table[0],rehashidx 恢复为 -1。
|
||||
|
||||
Reference in New Issue
Block a user