繁体   English   中英

Redis 过期不起作用

[英]Redis Expiration not working

我正在使用 Redis Pub/Sub 模型 ( https://redis.io/topics/pubsub ),我也在使用 jedis 客户端。 我已经订阅了redis过期。 当 redis 的键数较少时,这非常有效。 但是,如果我有超过 100 万个具有不同 TTL 的密钥,那么密钥的到期并不总是根据密钥的 TTL 发生。

从 redis 文档( https://redis.io/commands/expire ):

Specifically this is what Redis does 10 times per second:
1. Test 20 random keys from the set of keys with an associated expire.
2. Delete all the keys found expired.
3. If more than 25% of keys were expired, start again from step 1.

因此,对于大量密钥,选择的随机密钥可能具有更高的 TTL,因此步骤 2 和 3 不会被执行。

我该如何解决这个问题,或者我可以使用 redis 以外的其他东西来实现这一点吗?

Redis Keyspace Notifications页面上提到了您的问题。

如果没有命令始终针对密钥,并且有许多密钥与 TTL 相关联,则密钥生存时间降至零与生成过期事件的时间之间可能存在显着延迟。

为了解决这个问题,您可以尝试使用hz配置值增加活动过期事件的频率,默认为每秒 10 次。

为了解决这个问题,我们决定使用一个不同的 redis 数据库,它只包含具有相同 TTL 的键。

我们继续为所有其他键使用默认数据库(索引 0)(例如不需要过期通知......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM