Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_Redis - Fatal编程技术网

在java中如何使redis在准确的时间过期?

在java中如何使redis在准确的时间过期?,java,redis,Java,Redis,示例:我想让redis字符串“aKey”:“aValue”在未来某个时间过期(2018.08.17 00:00,现在是2018.08.16 12:00), 这是我的解决方案: long expireTime = Date.from(LocalDateTime.now().with(LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant()).getTime() - Date.from(LocalDateTime.now().atZone(Z

示例:我想让redis字符串“aKey”:“aValue”在未来某个时间过期(2018.08.17 00:00,现在是2018.08.16 12:00), 这是我的解决方案:

long expireTime = Date.from(LocalDateTime.now().with(LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant()).getTime() - Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()).getTime();
redisTemplate.opsForValue().set("aKey","aValue",expireTime, TimeUnit.SECONDS);

我想要一个完美的解决方案。

谢谢你的帮助,我找到了;redis有“EXPIREAT”命令; 我可以使用以下代码替换我的代码: redisTemplate.opsForValue().set(“aKey”、“aValue”);
redisTemplate.expireAt(“aKey”,Date.from(LocalDateTime.now().with(LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant())

完美的解决方案你的解决方案有什么问题?我认为这不是最好的解决方法;为了给消息添加TTL,您需要一些逻辑组件。第一个是当前时间,第二个是您希望它过期的时间,这是您得到的。我唯一的建议是将该逻辑移到一个适当命名的方法(
getexpire
)中。检查