• 作者:老汪软件技巧
  • 发表时间:2024-12-27 07:06
  • 浏览量:

前言

redis 渐进式rehash听说过没,没的话赶快一键三连呀。

redis的hash表结构,随着数据量的增加,就可能会发生扩容处理。扩容的处理方案,就是Redis 的 rehash 技术。

扩容通常是将数组扩大原来的两倍 ,redis 的hash结果当然不和java的hashMap类似,至少要明白hash的数据结构吧

渐进式 Rehash 的原理

当Redis的hash表越来越大,rehash的成本也会越来越高,因此现在Redis中实现了一种渐进式rehash的方案,他可以在哈希表rehash操作时,分多个步骤逐渐完成的方式.

渐进式Rehash,解决了传统重哈希带来的性能问题。其工作原理主要包括以下几点:

1. 数据结构

底层是使用了两个全局哈希表的。哈希表1 和哈希表2。并且会维护一个rehashindex ,初始值为-1,来记录当前rehash的下标位置.

当rehash 开始时就会,创建哈希表2,原来的两倍。

rehashindex 就是我们 哈希表1的数组桶的位置

2. 渐进式hash过程

最开始向hash表中插入数据时,只使用哈希表1,数据逐渐增多,当元素个数和hash表中的数组长度一致时,就会触发rehash,这时候,会把哈希表2的容量扩大一倍。然后就开始进入rehash流程。

redis面试中常被问到的__面试进阶

当一个元素进来时,就会把** 哈希表1**的 rehashindex 桶的数据 rehash到 哈希表2,然后再把当前新put的元素 放到哈希表2中。

所以,rehash 过程并没有完全完成 ,也能添加数据

后续的其他操作中也一样,会沿着hashindex一直往后开始进行逐个桶的rehash,一直到哈希表1中的元素全部完成rehash。

3 rehash 过程中发生查询怎么处理

在Rehash开始时,Redis会创建一个新的哈希表(称为哈希表2),而旧的哈希表(称为哈希表1)仍然保留。

Redis首先会在哈希表1中查找键。如果在哈希表1中没找到,Redis会接着在哈希表2中查找。这确保了即使在Rehash过程中,所有的键都是可查询的。

当然删除逻辑也类似

渐进式 Rehash 的优势

性能稳定:通过分散重哈希的负载,Redis 能够保持高性能,无论数据量多大,用户操作的响应时间始终保持在可接受范围内。

避免阻塞:传统的重哈希可能会导致操作阻塞,影响其他请求的响应。而渐进式 rehash 能够在用户请求和重哈希之间平衡负载,确保高并发场景下的性能更加可靠。

总结

本篇文章大概介绍了渐进式hash的原理,看完本篇文章能了解 为什么reids 会采用渐进式rehash,以及rehash 的好处,还有就是再rehash过程中元素的新增、查询是怎样的过程。

希望本篇文章能对你有所关注!!!感谢老铁的们的一键三连,如果佬们还能投我两票,感激不敬啊(送在线宝典一份)。


上一条查看详情 +自动评估基准 | 设计你的自动评估任务
下一条 查看详情 +没有了