Redis 源码解读之 Rehash 的调用时机
背景和问题
本文想要解决的问题
- 什么时机触发 Rehash 操作?
- 什么时机实际执行 Rehash 函数?
结论
- 什么时机触发 Rehash 操作?
- 缩容: Redis 定时任务
serverCron会在每个周期内检查 bucket 的使用情况。当存放 key 的数量和总 bucket 数的比例小于HASHTABLE_MIN_FILL(10%),触发缩容 Rehash 操作。- 扩容:在每次调用
dictAddRaw新增数据时,会检查 bucket 的使用比例。扩容的条件是以下之一:
dict_can_resize = 1(该参数会在有 COW 操作的子进程运行时更新为 0,防止在子进程操作过程中触发 Rehash,导致内核进行大量的 Page 复制操作)- 当前存放的 key 的数量与 bucket 数量的比例超过了
dict_force_resize_ratio(5)
- 什么时机实际执行 Rehash 函数?
- 定时任务: Redis 定时任务
serverCron会在每个周期内执行 1ms 渐进式Rehash 操作。- 附着于其他操作:在 Redis 执行
dictAddRaw,dictGenericDelete,dictFind,dictGetSomeKeys和dictGetRandomKey等操作前会执行 Rehash 操作。

本文深入探讨Redis中Rehash机制的触发时机与执行流程。包括Redis何时决定进行扩容或缩容,以及Rehash如何在定时任务与数据操作过程中逐步完成。
最低0.47元/天 解锁文章
1346

被折叠的 条评论
为什么被折叠?



