Java Redis过期不工作
我使用的是Redis发布/订阅模型(),我使用的是jedis客户端。我已经订阅了redis。当redis的键数较少时,这种方法非常有效。但是,如果我有超过100万个具有不同TTL的密钥,那么密钥的过期并不总是根据密钥的TTL发生 从redis文档()中: 因此,对于大量的键,选择的随机键可能具有更高的TTL,因此步骤2和3不会执行Java Redis过期不工作,java,database,algorithm,redis,nosql,Java,Database,Algorithm,Redis,Nosql,我使用的是Redis发布/订阅模型(),我使用的是jedis客户端。我已经订阅了redis。当redis的键数较少时,这种方法非常有效。但是,如果我有超过100万个具有不同TTL的密钥,那么密钥的过期并不总是根据密钥的TTL发生 从redis文档()中: 因此,对于大量的键,选择的随机键可能具有更高的TTL,因此步骤2和3不会执行 我如何解决这个问题,或者我可以使用redis以外的其他工具来实现这一点?第页提到了您的问题 如果没有命令不断地以该键为目标,并且有许多具有 与TTL相关的时间间隔可能
我如何解决这个问题,或者我可以使用redis以外的其他工具来实现这一点?第页提到了您的问题 如果没有命令不断地以该键为目标,并且有许多具有 与TTL相关的时间间隔可能会有明显的延迟 关键生存时间降至零,过期事件发生的时间为零 生成
为了解决这个问题,您可以尝试使用
hz
config值(默认为每秒10次)增加活动过期事件的频率。为了解决这个问题,我们决定使用不同的redis数据库,它只包含具有相同TTL的密钥
我们继续为所有其他键使用默认数据库(索引0)(例如,不需要过期通知…)
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.