我的用例:我使用 Redis 来存储大量数据。在 1 秒内,我在 redis 中写了大约 24k 个密钥,ttl 为 30 分钟,我希望在 ttl 过期后删除这些密钥。当前 redis 驱逐密钥的实现是在任务中工作,每个任务选择 20 个随机密钥并查看密钥是否已过期 ttl 然后删除这些密钥,redis 建议使用不超过 100 个此类任务。因此,如果我设置 hz(没有任务到 100),那么 Redis 将能够清除 tke 键 max @ 2000 个键/秒,这对我来说太少了,因为我的插入率非常高,最终导致内存不足时出现内存异常变满。
我的替代方案是:1/点击随机键,或者我们知道已经过期的键,这将在 Redis 中启动删除 2/当达到 maxmemory 时设置驱逐策略。当达到最大内存时,这将积极删除 redis 键。3/ 将 hz(频率)设置为更高的值。这将启动更多任务以每秒清除过期密钥。1/ 似乎不可行。对于 2/ & 3/ 基于当前缓存定时器 30 分钟,给定插入率,我们可以使用 maxmemory 12*1024*1024 maxmemory-samples 10 maxmemory-policy volatile-ttl hz 100
但是使用 2 意味着 redis 将一直执行删除键然后插入,因为我假设在我的情况下内存将始终等于 12 GB
那么使用这种策略好不好,还是我们应该在 Redis 上编写自己的密钥驱逐服务?