Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Redis过期不工作_Java_Database_Algorithm_Redis_Nosql - Fatal编程技术网

Java Redis过期不工作

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发布/订阅模型(),我使用的是jedis客户端。我已经订阅了redis。当redis的键数较少时,这种方法非常有效。但是,如果我有超过100万个具有不同TTL的密钥,那么密钥的过期并不总是根据密钥的TTL发生

从redis文档()中:

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


我如何解决这个问题,或者我可以使用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.