Redis 6.2&7 Rehash相关优化 | 运维进阶

Redis6.2+优化:解决大dictrehash的可用性与逐出问题
文章回顾了Redis中当键值对超过阈值时rehash导致的额外内存需求和相关风险,并介绍了Redis6.2及以后版本对rehash的优化,如延迟执行以防止大规模数据逐出和可用性下降。实验结果显示,Redis7.0.11在处理大量键值对时显著减少了超时和数据逐出,提升了稳定性。

一、Redis rehash问题回顾

简单回顾下超出key阈值后,需要额外的hash表内存大小:

键值个数 需要额外的hash表内存大小
134,217,728 2GB
67,108,864 1GB
33,554,432 512.0MB
16,777,216 256.0MB
8,388,608 128.0MB
4,194,304 64.0MB
2,097,152 32.0MB
1,048,576 16.0MB
524,288 8.0MB

随着key个数越多,rehash需要的额外内存也越大,所带来的可用性风险(大量逐出,Redis同步)和数据丢失(逐出)风险也越高。

二、Redis 6.2&7+ Rehash相关优化

Redis 6.2后对Rehash做了相关优化:

Limit the main db dictionaries expansion to prevent key eviction (#7954)
  In the past big dictionary rehashing could result in massive data eviction.Now this rehashing is delayed (up to a limit), which can result in performance loss due to hash collisions.

简单翻译:

在大的hash表(键值数多)场景下,rehash会延迟执行防止大量数据丢失和可用性问题。

三、实验

1. 版本选择

  • Redis 6.0.15

  • Redis 7.0.11

2. 实验条件

  • maxmemory = 5.6GB

  • 第一次灌入:67,100,000个key,观察内存

  • 第二次灌入:2,000,000个key,观察可用性和逐出

3. 开始实验

(1) Redis 6.0.15

第一次灌入:67,100,000个key,观察内存:

maxmemory:         5.6GB
used_memory_human: 5.5GB
dbsize:            67,100,000  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值