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

锁和事务谁在外层

锁和事务谁在外层

最近发布系统出现一个问题,发布单审核时,子发布单中的数据出现重复,经过排查,是因为锁和事务的顺序问题引起的。
引起问题的伪代码入下
在这里插入图片描述
这段代码可能会出现,多线程访问时,
线程1进入方法,开启了事务A,获取了分布式锁,执行完业务逻辑后,释放了锁,然后发钉钉通知,最后提交事务
在线程1释放锁和提交事务A这段时间内,有可能会有其他线程进入该方法,执行业务逻辑并提交事务
所以可能会出现出乎意料的情况。

在分布式系统中同时使用‌事务和分布式锁时‌,‌建议将事务放在内层(方法内部),分布式锁放在外层(方法外部)‌。这种组织方式可以确保数据的一致性和并发安全

核心原则‌:

‌事务管理优先‌:将事务控制放在方法内部(如Service层),确保数据操作在事务保护下执行。
‌分布式锁后置‌:在调用事务方法之前先获取分布式锁,并在方法结束后释放锁。这样即使事务因并发未提交完成,锁仍保持有效状态,避免并发修改共享资源。
像钉钉通知这类可能耗时的操作也最好不要放在事务中

http://www.xdnf.cn/news/2729.html

相关文章:

  • 西门子PLC结构化编程_水处理系统水泵多备多投
  • Linux中的shell脚本练习
  • 在线图书管理系统的结构化需求分析过程讲解
  • 【Git】项目多个分支开发、维护与优化处理 -- 还未实测 记录初
  • PCL实时动态加载显示点云功能以及laslib配置
  • 使用Python在excel里创建柱状图
  • 如何搭建spark yarn 模式的集群集群
  • uniapp利用生命周期函数实现后台常驻示例
  • auto(x) decay copy
  • 一键叠图工具
  • 浏览器存储
  • 服务器文件同步工具有哪些?
  • 经典数仓架构深度解析与演进:从离线处理到新型架构对比
  • 实战篇:在QEMU中编写和调试VHost/Virtio驱动
  • 从数据到决策:如何使用Python进行自动驾驶数据分析
  • 利用Python打印有符号十进制数的二进制原码、反码、补码
  • 问题 ERROR: for jobmanager ‘ContainerConfig‘ 原因及解决
  • ComfyUI 学习笔记:安装篇及模型下载
  • 2025-4-27-C++ 学习 数组(2)
  • springboot项目文件上传到服务器本机,返回访问地址
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • Express.js 框架教程:从入门到精通
  • 【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU
  • T-BOX应用 NXP S32K148控芯片搭配 SD NAND(嵌入式SD卡)存储的完美结合
  • 设计模式(状态模式)
  • 【力扣刷题实战】丢失的数字
  • vue代码规范管理
  • BeeWorks企业内部即时通讯软件支持国产化,已在鸿蒙系统上稳定运行
  • 【Altium】自定义菜单显示名称
  • C++23 std::bind_back:一种调用包装器 (P2387R3)