redis哈希表扩容与缩容

164次

问题描述:

哈希表内存

推荐答案

2023-10-24 12:29:57

随着redis的操作的不断执行,哈希表保存的键值会逐渐地增多或者减少,为了让哈希表的负载因子(ratio)维持在一个合理的范围之内,当哈希表保存的键值对数量太多或者太少时,程序需要对哈希表的大小进行相应的扩展或者收缩。

ratio = ht[0].used / ht[0].size比如,hash表的size为4,如果已经插入了4个k-v的话,则ratio为1。redis的默认负载因子为1,负载因子最大可以达到5(持久化的时候,需要fork操作,这个时候不会分配内存,所以redis源码中有判断,如果大于数据长度的5倍(5*used),则马上扩容)。扩展和收缩哈希表的工作可以执行rehash(重新散列)操作来完成,Redis对字典的哈希表执行rehash的策略如下:

1、如果ratio小于0.1,则会对hash表进行收缩操作。

其他答案

2023-10-24 12:29:57

Redis哈希表在扩容时会先创建一个新的哈希表,并将旧表中的所有数据重新哈希到新表中,然后将新表替换旧表,完成扩容。

缩容时则相反,先创建一个新的小表,将旧表中的数据重新哈希到小表中,然后再将小表替换旧表,完成缩容。在扩容和缩容的过程中,Redis会利用渐进式哈希算法,尽量减少数据迁移的过程中对客户端的影响,保证系统的稳定性。

其他答案

2023-10-24 12:29:57

Redis哈希表扩容是指当哈希表中的键值对数量达到一定阈值时,Redis会自动将哈希表大小扩大到下一个2的幂次方大小,以提高哈希表性能。

扩容过程中,Redis会创建一个新的更大的哈希表,并将旧哈希表中的所有键值对重新哈希到新哈希表中,最后再将旧哈希表释放掉。

缩容则是指当哈希表中的键值对数量减少时,Redis会自动将哈希表大小缩小到最小能容纳当前键值对数量的2的幂次方大小,以减少内存占用。

缩容过程中,Redis会创建一个新的更小的哈希表,并将旧哈希表中的所有键值对重新哈希到新哈希表中,最后再将旧哈希表释放掉。

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6