redis快的秘诀--rehash

Redis在哈希表扩展时采用渐进式rehash策略,以避免一次性移动大量数据导致的性能阻塞。该策略将rehash过程分散到多次客户端请求中,每次处理一部分数据,确保服务的连续性和高性能。在rehash期间,数据同时存在于两张表,保证了数据访问的稳定性。
摘要由CSDN通过智能技术生成

redis快的秘诀--渐进式rehash

  1. 什么是rehash
    当我们创建一个hashMap的时候,我们一般会设置参数:初始化容量,以及负载因子,当hash表中的负载因子达到负载极限的时候,hash表会自动成倍的增加容量(桶的数量),并将原有的对象重新的分配并加入新的桶内,这称为rehash。这个过程是十分好性能的
  2. Redis的全局哈希表
    为了实现从键值对的快速访问,redis使用了哈希表来保存所有的键值对,一个哈希表就是一个数组,数组里面的每一个元素就称为一个哈希桶,所以一个哈希表就是由多个哈希桶组成的,每个哈希桶中保存了键值对数据
    在这里插入图片描述
  3. Rehash带来的性能问题
    当redis进行rehash的时候,如果数据有上万条 ,百万条一起进行rehash,数据移动的过程,就一定会阻塞redis,在阻塞的过程中,就会导致很多请求阻塞
  4. Redis的解决方案:渐进式哈希
    原理:把一次大的数据拷贝移动,分配到很多次处理请求中来
    如下:把表1的数据移动到表2,第一次客户端请求就移动第一个位置的元素计算位置并移动到第二张大表,每一步rehash结束,都要增加索引值,并且把旧表中已经迁移完毕的bucket置为空指针,第二次客户端请求就移动第二个位置上的元素。。。。。。直到最后把所有的数据移动完成,回收空间,重置旧表,重置渐进式哈希的索引
    所以:我们在rehash的过程中,数据其实是保存在两张表的,一张表没有就会去寻找下一张表
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值