我正在使用Redis Pub / Sub模型(https://redis.io/topics/pubsub),我正在使用jedis客户端。我订阅了redis expiration。当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以外的东西来实现这个目标?
答案 0 :(得分:0)
Redis Keyspace Notifications页面上提到了您的问题。
如果没有命令持续定位该键,并且有许多键 与TTL相关联,可能会在时间之间出现明显的延迟 生活的关键时间降至零,以及过期事件的时间 生成。
要解决此问题,您可以尝试使用hz
配置值增加活动过期事件的频率,默认值为每秒10次。
答案 1 :(得分:0)
为解决此问题,我们决定使用其他Redis数据库,该数据库仅包含具有相同TTL的密钥。
对于所有其他键,我们继续使用默认数据库(索引0)(例如,不需要过期通知...)