首页 > 数据库 >谈论关于Redis产生的分布式ID获取为空问题

谈论关于Redis产生的分布式ID获取为空问题

时间:2023-06-14 11:22:11浏览次数:39  
标签:Transactional opsForValue Redis 为空 ID redisTemplate 分布式

一:事故

  在项目测试中,遇到一个事件创建失败问题,追踪日志发现分布式ID的获取值为空,导致后续表写入异常。

  经排查锁定相关方法,具体方法经简化如下:

      

  @Transactional
  public String testRedisTrans(){
   redisTemplate.setEnableTransactionSupport(true);
   redisTemplate.multi();
   redisTemplate.opsForValue().set("demo1","111111111");
   redisTemplate.opsForValue().set("demo2","222222222");
   redisTemplate.exec();

   redisTemplate.setEnableTransactionSupport(false);
   return redisTemplate.opsForValue().increment("countId",1).toString();
  }

 去除掉@Transactional注解后,发现问题解决

                                                                                            

 

二:查找原因

   根据源码分析,在执行exec方法的时候,当开启了 Redis 事务支持后,就会去绑定一个连接(bindConnection),否则就去获取新的 Redis 连接(getConnection)。这里我们是开启了的,所以再到 bindConnection方法中查看如何绑定连接的。

 

                                                                         

 

  接着往下看,关键代码如下所示,当开启了 Redis 事务支持,且添加了 @Transactional 注解时,就会执行 Redis 的 mutil 命令。

  Redis Multi 命令 用于标记一个事务块的开始,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

                                                                        

 

三:解决方案

  在Redis配置类中,创建两个RedisTempLate对象,一个用来处理正常类,一个用来处理事务逻辑。 

                                                     

 

标签:Transactional,opsForValue,Redis,为空,ID,redisTemplate,分布式
From: https://www.cnblogs.com/daydayupHard/p/17479691.html

相关文章

  • 一个android文本比对app的实现(二)--界面
    <spanstyle="font-family:Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);">继上一篇博文大致介绍了这一简单但有点用处的app后(详情:</span><spanstyle="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;b......
  • 一个android 文本比对App的实现(一)
    做c++开发很多年了,从早年windowsvc6.0做客户端程序开发,这些年后台流媒体服务器后台开发。随着时代变迁,移动互联逐渐兴起,直到现在,移动互联的风头早已盖过传统互联网应用,因而传统后台开发似乎日渐式微。如今要找工作的话,android,IOS等开发的职位不但数量远远多于c++,而且报酬也要比c+......
  • Redis集群
    Redis集群本章是基于CentOS7下的Redis集群教程,包括:单机安装RedisRedis主从Redis分片集群1.单机安装Redis首先需要安装Redis所需要的依赖:yuminstall-ygcctcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:例如,我放到了/tmp目录:解压缩:tar-xvfredis-6......
  • 在上一操作期间遇到问题:Debug|AnyCPU 配置中 TargetFrameworkMoniker和NugetTargetMon
    在上一操作期间遇到问题:Debug|AnyCPU配置中TargetFrameworkMoniker和NugetTargetMoniker属性的值均为空场景使用VS打开之前的项目,报错:在上一操作期间遇到问题:Debug|AnyCPU配置中TargetFrameworkMoniker和NugetTargetMoniker属性的值均为空新建项目后,选择该项目未项......
  • 5、题目:Training in Creative Problem Solving: Effects on Ideation and Problem Fin
    期刊信息(1)作者:GeorgeB.Graen,StephenG.Graen(2)期刊:OrganizationalBehaviorandHumanPerformance(3)DOI:10.1016/0030-5073(82)90233-1(4)ISSN:0030-5073   研究背景创造力训练作为工业培训的一个子集,普遍面临着工业培训研究的许多问题,也面临着一些独特的问题。......
  • 【每日一题】Problem 120F. Spiders
    原题解决思路通过给定的数据,将其构建称树,取其中最大的深度进行拼接,最后得到最终结果如何获取最大的深度以每个节点作为root构建树,然后取其中最大的深度#include<bits/stdc++.h>/***@paramvec*@paramcur当前节点*@paramlast上一个访问的节点*@param......
  • idea 查看类的继承关系
    快捷键一:打开该类,使用ctrl+h 快捷键二:ctrl+alt+鼠标右键点击implementations提示 ......
  • STM32CubeIDE卸载插件/卸载汉化
    汉化时下载了所有的内容,打开就提示错误,大概是什么不能类转化查了下,说是不能全部都装,只装两个即可,然后就要卸载其他的话不多说直接上图哈哈哈,没有报错界面了,我找找,重启软件出来了然后 选中卸载项就能卸载了 可以用文件夹中选文件的快捷键哦 ......
  • android Button组件的属性和方法
    androidButton组件的属性和方法   一、相关属性     二、相关方法 setClickable(booleanclickable)设置按钮是否允许点击。clickable=true:允许点击clickable=false:禁止点击setBackgroundResource(intresid)通过资源文件设置背景色。resid:资源xml文件ID。按钮默认背......
  • 【转】Android字体小结
     android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。android:bufferType指定getText()方式取......