我正在尝试为Redisson上的键值设置大TTL(10天以上)。
我注意到Redisson将TTL转换为毫秒并在Redis(DragonFlyDB)上执行命令。
org.redisson.client.RedisException: ERR value is not an integer or out of range. channel: [id: 0xfa05de9e, L:/127.0.0.1:32812 - R:localhost/127.0.0.1:32773] command: (PSETEX), promise: java.util.concurrent.CompletableFuture@67330d28[Not completed], params: [hello, 864000000, PooledUnsafeDirectByteBuf(ridx: 0, widx: 8, cap: 256)]
字符串864000000
不大于最大值Integer
DragonFly(https://github.com/dragonflydb/dragonfly)有没有办法存档这个?
override fun cacheString(key: String, value: String, ttl: Duration): RFuture<Void> {
val result = redisClient.getBucket<String>(key).setAsync(value, ttl.seconds, TimeUnit.SECONDS)
return result
}
val failResult = cacheMangerService.cacheString("hello", "world", Duration.ofDays(10)) // throw Exception
val succesResult = cacheMangerService.cacheString("hello", "world", Duration.ofDays(3)) // Successful
型
编辑:我把DragonFlyDB切换到RedisCluster -->和864000000工作。所以它似乎只适用于DragonFlyDB。
已解决:由于某些原因,它只发生在setAsync中设置TTL而不是用expire()手动设置TTL时。
感谢您的阅读
1条答案
按热度按时间pieyvz9o1#
解决方法:出于某种原因,它只发生在setAsync中设置TTL时,而不是使用expire()手动设置TTL--> expire()使用eval srcipt。
字符串