使用redisTemplate设置过期时间是不是不能保证原子性?

竹蜻蜓dd 2019-10-27 07:31:55
示例:
使用set数据结构,往redis存值,
redisTemplate.opsForSet().add(key, values);
如果我还想设置过期时间,那就要这么写:

/**
* 往set中存值,并设置过期时间
*
* @param key 键
* @param time 过期时间
* @param values 值
* @return 成功的个数
*/
public long sSetAndTime(String key, long time, Object... values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) {
expire(key, time);
}
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}

问题来了:
如果我第一步存值成功之后,设置过期时间之前,出现某异常啥的,导致过期时间没有设置成功。。。大家懂我的意思了吧?
这样是不是不保证原子性了?
【ps:本人redis基础不好,如果问题中不严谨,也希望大家指出来,顺便给出答案,谢谢了。】
...全文
2053 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwmlow 2019-10-28
  • 打赏
  • 举报
回复
所以要保证原子操作
亦夜 2019-10-28
  • 打赏
  • 举报
回复
Redis连接断开,存值发生异常和超时时间不满足条件都会设置成功,前两个可以通过Redis事务解决,超时时间只要保证不会等于0就行了

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧