设为首页
收藏本站
切换到宽版
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
论坛
BBS
排行榜
Ranklist
搜索
搜索
热搜:
香港vps
香港VPS
amh
机柜
vps
分销
VPS
域名出售
火车头
云主机
不限流量
香港服务器
美国服务器
香港
全能空间
whmcs
digitalocean
本版
帖子
用户
MJJ论坛
»
论坛
›
技术交流分享
›
Web技术
›
说一说redis中渐进式rehash
返回列表
查看:
2127
|
回复:
0
说一说redis中渐进式rehash
[复制链接]
odmin
odmin
当前离线
积分
9338
发表于 2023-11-5 00:25:29
|
显示全部楼层
|
阅读模式
在 Redis 中,如果哈希表的数组一直保持不变,就会增加哈希冲突的可能性,从而降低检索效率。为了解决这个问题,Redis 会对数组进行扩容,通常是将数组大小扩大为原来的两倍。然而,这个扩容过程会引起元素在哈希桶中的分散,导致元素的移动。由于元素移动会涉及 IO 操作,所以这个重新哈希(ReHash)过程可能会导致许多请求被阻塞。
渐进式 rehash
为了避免这个问题,Redis 采用了渐进式 rehash。
在 Redis 中,默认使用两个全局哈希表:哈希表 1 和哈希表 2。最初,当你开始插入数据时,只使用哈希表 1,而哈希表 2 没有分配空间。随着数据逐渐增多,Redis 开始执行渐进式 rehash 的过程。
1、为哈希表 2 分配更大的空间,例如是当前哈希表 1 大小的两倍。
2、将哈希表 1 中的数据重新映射并拷贝到哈希表 2 中,确保每个元素都被正确地存储在新的哈希桶位置上。
3、释放哈希表 1 的空间,将其回收以便于系统的正常运行。
在上述的第二步中,涉及到大量的数据迁移和拷贝操作。如果一次性将哈希表 1 中的所有数据都迁移到哈希表 2,将导致 Redis 线程被阻塞,无法提供对其他请求的服务。这将导致 Redis 无法快速地访问数据。
回复
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Archiver
|
手机版
|
小黑屋
|
MJJ论坛
Copyright
MJJ论坛
© 2022 All Rights Reserved.
快速回复
返回顶部
返回列表