【发布时间】:2021-01-08 11:50:15
【问题描述】:
假设我想使用 RMapCacheReactive 和 Redisson 在 Redis 中存储一个对象 A。
一开始,我通过键 B 将其放入具有 10 000 毫秒 TTL 的映射中。在那之后,我通过相同的键 B 放置相同的对象 A,但 TTL 为零。
根据文档, put 方法“存储由键映射的具有指定生存时间的值”,所以我的期望是 A 将永久存储在该映射中。
然而,它实际上在 10 000 毫秒过去后被删除(使用 Redisson 客户端无法获取它)。
是不是我做错了什么?
我在 3.13.4 和 3.12.5 版本的 Redisson 上检查了此行为。
【问题讨论】:
-
您是否尝试将 TTL 设置为 -1?
-
RMapCacheReactive 没有这样的方法。即使它有,在我用新的 TTL 用同一个键输入一个新值后,不应该自动更改 TTL 吗?
-
这就是我所说的使用 ttl=0 不太可能,因为它没有更新密钥 ttl=0 表示该密钥没有生命周期,-1 表示无限。
-
根据文档,0 表示无穷大(“@param ttl - 键\值输入的生存时间。如果 0 则无限存储。”)。如果我尝试使用 -1 而不是零,我会得到一个异常“Caused by: java.lang.IllegalArgumentException: ttl can't be negative”