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

相关推荐

我的人生算是废了,23届裸辞空档一年,存款只能坚持几个月了,找不到像样的工作了,人生何去何从。
梦想是成为七海千秋:这大环境下为什么要裸辞呀,风险真的挺大的,而且社招的话23届没有太多的竞争力,不过既然已经裸辞了就不要焦虑慢慢找。
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在午休:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务