如果进程终止,Redisson Cache Map 不会逐出
Redisson Cache Map does not evict if process is terminated
我正在使用 Redisson 的 RMapCache 来处理我的应用程序中的一些分布式集合。
这些集合中的键应该在一段时间后过期,所以在添加键时我设置了 TTL:
RMapCache<String, MyClass> cacheMap = GetMap("test");
cacheMap.put("DTO1", myClassInstance, 20, TimeUnit.SECONDS);
所以 20 秒后密钥应该会过期。如果进程未在到期时间戳之前终止,则此方法非常有效。但是,如果进程由于任何原因终止,则密钥永远不会被清除,这意味着驱逐由 Java 进程内的 Redisson 处理,而不是由 Redis 本身处理。
有什么办法可以让redisson使用Redis内置的EXPIRE功能吗?这样在 Map 中插入的进程不负责键的驱逐。
我发现当前的 redisson 实现非常脆弱。
一旦您在崩溃后创建相同的 RMapCache 对象,它就会启动 evictionScheduler,后者又会从 Redis 中清除过期的条目。
如果你只想依赖 Redis 的逐出过程,那么使用 RBucket 对象。 Redis 不提供 TTL 映射条目过期时间。
我正在使用 Redisson 的 RMapCache 来处理我的应用程序中的一些分布式集合。
这些集合中的键应该在一段时间后过期,所以在添加键时我设置了 TTL:
RMapCache<String, MyClass> cacheMap = GetMap("test");
cacheMap.put("DTO1", myClassInstance, 20, TimeUnit.SECONDS);
所以 20 秒后密钥应该会过期。如果进程未在到期时间戳之前终止,则此方法非常有效。但是,如果进程由于任何原因终止,则密钥永远不会被清除,这意味着驱逐由 Java 进程内的 Redisson 处理,而不是由 Redis 本身处理。
有什么办法可以让redisson使用Redis内置的EXPIRE功能吗?这样在 Map 中插入的进程不负责键的驱逐。
我发现当前的 redisson 实现非常脆弱。
一旦您在崩溃后创建相同的 RMapCache 对象,它就会启动 evictionScheduler,后者又会从 Redis 中清除过期的条目。
如果你只想依赖 Redis 的逐出过程,那么使用 RBucket 对象。 Redis 不提供 TTL 映射条目过期时间。