人类进步的阶梯
算法和数据结构
滑动窗口go模板
nSum问题解决模板
【链表问题】
21. 合并两个有序链表
23. 合并 K 个升序链表
19. 删除链表的倒数第 N 个结点
876. 链表的中间结点
141. 环形链表
redis
tx
一些QA
【Redis】
rehash
击穿、穿透、雪崩
【计算机网络】
TCP
【Mysql】
索引
资料索引
本文档使用 MrDoc 发布
-
+
首页
rehash
- [一文搞懂Redis的渐进式rehash扩容机制](https://cloud.tencent.com/developer/article/2416771) --- ## 触发 - 触发机制:添加键的时候判断是否需要扩容 - 判断条件:使用装载因子(load factor)判断是否需要rehash,装载因子 = 所有entry的个数 / 哈希桶的个数 - 满足条件: - 装载因子 ≥ 1,同时,哈希表被允许进行 rehash。在进行 RDB 生成和 AOF 重写时,哈希表的 rehash 是被禁止的,这是为了避免对 RDB 和 AOF 重写造成影响。 - 装载因子 ≥ 5 ## 渐进式rehash 扩展或收缩哈希表需要将 ht[0] (旧全局哈希表) 的所有键值对移动到 ht[1] (新全局哈希表) ,`分多次` `渐进式` ,主要是一次移动所有键值会导致redis在一段时间内无法对外提供服务。 1. 为ht[1]分配空间,字典同时存在两个哈希表 2. 把 rehashidx 置为 0,rehash 工作正式开始 3. rehash 期间,每次对字典进行增删改查的时候,会同时迁移一部分的ht[0]数据到ht[1],同时把rehashidx加一,依次处理下一个哈希桶 4. 随着字典操作的不断执行,ht[0] 的所有键值对最终会全部移动到 ht[1],此时程序会将 rehashidx 设为 -1,释放ht[0]的空间,表示 rehash 操作已完成。 **1. 查找、删除、更新会在ht[0]和ht[1]两个哈希表中进行 2. 新增只会在ht[1]中进行,确保 ht[0] 中已经被清空的单向链表不会新增元素 3. 在 rehash 被触发后,即使没有收到新请求,Redis 也会定时执行一次 rehash 操作,而且,每次执行时长不会超过 1ms,以免对其他任务造成影响。**
adminadmin
2024年6月3日 23:15
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码