Redis到期无效

时间:2017-01-10 12:18:38

标签: java database algorithm redis nosql

我正在使用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以外的东西来实现这个目标?

2 个答案:

答案 0 :(得分:0)

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

  

如果没有命令持续定位该键,并且有许多键   与TTL相关联,可能会在时间之间出现明显的延迟   生活的关键时间降至零,以及过期事件的时间   生成。

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

答案 1 :(得分:0)

为解决此问题,我们决定使用其他Redis数据库,该数据库仅包含具有相同TTL的密钥。

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