Redis 源码解读之 Rehash 的调用时机

# Redis 源码解读之 Rehash 的调用时机
## 背景和问题
本文想要解决的问题
 1. 什么时机触发 Rehash 操作?
 2. 什么时机实际执行 Rehash 函数?
## 结论
1. 什么时机触发 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)`

2. 什么时机实际执行 Rehash 函数?
> * **定时任务**: Redis 定时任务 `serverCron` 会在每个周期内执行 1ms 渐进式Rehash 操作。
> * **附着于其他操作**:在 Redis 执行 `dictAddRaw`, `dictGenericDelete`, `dictFind`, `dictGetSomeKeys` 和 `dictGetRandomKey` 等操作前会执行 Rehash 操作。

## 源码分析
Redis Rehash机制
#技术交流##Redis#
全部评论
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Redis 源码解读之 Rehash 的调用时机》, 一起来围观吧 https://blog.csdn.net/yanglingwell/article/details/114626169?utm_source=app&app_version=4.5.4
点赞
送花
回复
分享
发布于 2021-03-14 09:19

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务