Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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 由于使用Redision客户端的redis TTL,集合对象丢失_Java_Redis_Spring Data Redis_Ttl_Redisson - Fatal编程技术网

Java 由于使用Redision客户端的redis TTL,集合对象丢失

Java 由于使用Redision客户端的redis TTL,集合对象丢失,java,redis,spring-data-redis,ttl,redisson,Java,Redis,Spring Data Redis,Ttl,Redisson,我们使用Redision client for java从redis获取数据,但由于TTL,对象从集合中删除 范例 我们正在尝试以下方法,通过TTL从Redis获取数据 final RList RList=client.getList(getEnvCacheKey(cacheKey)) rList.expire(7L,时间单位秒) rlist.add(“Value1”) rlist.add(“Value2”) assertThat(rList).仅包含(“Value1”、“Value2”)//此

我们使用Redision client for java从redis获取数据,但由于TTL,对象从集合中删除

范例

我们正在尝试以下方法,通过TTL从Redis获取数据

final RList RList=client.getList(getEnvCacheKey(cacheKey))

rList.expire(7L,时间单位秒)

rlist.add(“Value1”)

rlist.add(“Value2”)

assertThat(rList).仅包含(“Value1”、“Value2”)//此条件在7秒前为真

现在7秒后
assert rlist.size()==2
条件变为false,因为对象引用由于TTL而被删除

由于这个原因,我们遇到了一个生产问题。有什么方法可以在TTL之后保留这些对象吗?任何形式的帮助都将不胜感激。

TTL(生存时间)本身设置特定密钥的过期时间,过期后将无法再检索该密钥。如果您想将密钥保留在内存中,只需跳过设置
rList.expire(7L,TimeUnit.SECONDS)全部(无限过期)

如果要延长到期时间,可以重复
expire
命令。也可以通过这种方式完全删除TTL,尽管我无法告诉您具体如何使用Redisson

至于过期的密钥,Redis每秒清除它们10次(),因此我认为您无法(一致地)恢复过期密钥中的值


我的一般建议是退后一步,看看您的系统设计。如果您丢失了过期的密钥,可能该产品的这一部分应该得到扩展的TTL/无TTL/定期TTL刷新

它的行为方式与必须的行为方式相同,您为什么要更改它?如果您想将这些值保留更长的时间,只需增加时间或根本不指定时间,这样它就永远不会删除。