- 作者:老汪软件技巧
- 发表时间: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流程。
当一个元素进来时,就会把** 哈希表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过程中元素的新增、查询是怎样的过程。
希望本篇文章能对你有所关注!!!感谢老铁的们的一键三连,如果佬们还能投我两票,感激不敬啊(送在线宝典一份)。