当前位置: 首页 > news >正文

巩义做网站汉狮网络专业江西网站建设

巩义做网站汉狮网络,专业江西网站建设,东莞网站设计风格,专业做英文网站的公司文章目录 介绍原因分析:修改代码一波三折,再次出现问题 介绍 遇到了一个很有意思的问题。 在service层加了事务。 为了防止并发,在component层加了分布式锁。 先根据前端传入的id,在数据库中使用queryA()查到一个key然后对这个key进行加锁再…

文章目录

    • 介绍
    • 原因分析:
    • 修改代码
    • 一波三折,再次出现问题

介绍

遇到了一个很有意思的问题。
在service层加了事务。
为了防止并发,在component层加了分布式锁。

  1. 先根据前端传入的id,在数据库中使用queryA()查到一个key
  2. 然后对这个key进行加锁
  3. 再次调用queryA()。目的是为了做校验
  4. 更新数据库
  5. 在component层释放锁

最终现象是:加锁失败。

线程A获取到了锁,然后执行下面的操作。
线程B等待这把锁。
线程A执行完了之后,释放锁。
线程B查数据库,依然校验成功。按理说A操作了数据,线程B的校验应该不通过。
实际上线程B没有读到线程A更新后的数据

原因分析:

数据库mysql的隔离级别是 可重复读。

那么在线程B等待锁的时候,已经缓存了一份数据库连接了。
此时A更新了数据,然后释放锁(假设提交了事务),由于是可重复读级别的事务隔离,所以线程B此时无论如何都读不出来线程A修改的数据。
后来解决方法就是让前端传key进来。

修改代码

也就是代码改成了

1. 前端传入key
2. 然后对这个key进行加锁
3. 调用数据库的queryA()方法。目的是为了做校验
4. 更新数据库
5. 在component层释放锁

此时线程A获取到了锁,直到事务提交了,线程B才开始数据库连接,此时正常

一波三折,再次出现问题

经过上面的分析,
现在我也怀疑,是不是在事务提交前就释放了锁呢?

http://www.yayakq.cn/news/379858/

相关文章:

  • 浙江创业建设公司网站wordpress如何编辑器
  • 网站维护更新网络营销公司排名榜
  • 湘潭网站建设优等磐石网络别墅花园装修设计公司
  • 专业网站定制公司免费网站服务器推荐
  • 网站怎么做伪静态页面适合推广的app有哪些
  • cms进行网站开发网站主题编辑工具WordPress
  • 网站风格配置怎么做深圳招聘网站
  • 市环保局网站建设方案产品推广策划书
  • 东营网站开发公司兰州新区农投建设网站
  • 网站下一步工作怎么做app开发软件怎么做
  • 手机建设银行网站进不去wordpress 安全选项
  • 网站备案的服务器记事本里做网站 怎么把字体
  • 旅游网站有哪些功能重庆网站房地产
  • 做网站手机端需要pc端的源代码吗网页平面设计招聘
  • 沈阳开发网站公司哪家好做的公司网站风格跟样式和别人一样
  • 北京城乡建设集团网站个人主页网站制作
  • 电子商务网站建设与网页设计小型网站建设公司
  • 机场建设网站自己制作音乐的软件免费
  • 用react做的网站上传合肥微网站制作
  • 江苏省电力建设一公司网站岳阳网
  • 做企业网站设计价格是多少自己的品牌怎么推广加盟
  • seo技术培训东莞台州网站seo
  • 2017做网站赚钱郑州企业网站托管公司
  • 坂田公司做网站张家界百度seo
  • 爱做网站软件h5四合一网站建设
  • 河南怎样做网站推广公司网站建设调研
  • 网站备案注销 万网网站建设中的发布维护包括
  • 五金喷漆东莞网站建设个人网站建设基本定位
  • 沙河网站建设做网站站怎么赚钱吗
  • 临沂谁会做网站禁止浏览器访问一个网站怎么做