使用RedisTemplate 操作Redis 事务遇到的坑

Java 新民 1120℃ 已收录 0评论

最近有个新项目将要开启,在搭建项目的过程中, 顺便写了几个功能,其中有几个是打算使用缓存,最后决定了使用Redis 。 其中有几个功能点要针对redis 执行多次写操作。 这个时候就需要redis 的事务了,保证原子性。 最后发现出现了异常,异常如下:

遇到此问题立马就慌了,冷静了半天。打开RedisTemplate 源码进行了断点调试跟踪。最后确定了问题是,在执行 multi 、exec 操作时,发现每次的RedisConnection 对象都是新的,也就是说每次的redis 连接都是新创建的。 最后发现有个execute(SessionCallback<T> session) 方法,这个方法是使用SessionCallback 来将多个操作绑定到一条连接上执行。 所以我的代码就改成如下:

执行了一遍发现没有问题。第二次执行的时候发现在事务获取缓存时是null, 但实际上redis 服务器中时候对应的缓存的,百度了好多类似的问题,最后实在没办法,将获取缓存的代码放在了事务开启之前,执行了好多遍,发现都没有问题。这问题算是解决了。最终的代码如下:

以上是我个人的解决方案, 若同行大佬们有好的意见,欢迎下面提出来啊。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.snowruin.com/?p=1760
喜欢 (2)or分享 (0)
发表我的评论
取消评论
表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址