Redis分布式锁与MySQL事务

1、需求

近期公司在有一个关于wms仓储系统,结合工作经历了解,相关业务对于数据时效性,正确性要求很高,加上之前项目中从来没有真正用过redis分布式,索性在该项目中使用。

2、问题

刚开始用时候,网上一通搜索了解之后,写了如下代码(简易代码,仅仅为了展示问题)

然而在跑测试的时候时不时会出现,数据不正确,以及接口执行速度慢问题。

3、解决

经过高强度搜索以及询问OpenAI之后才知道,根本原因是redis分布式锁与MySQL事务顺序问题导致。springboot事务注解用到了AOP,因此在上述代码的最后,redis分布式锁释放了,但是MySQL事务没有结束,这就导致高并发情况下出现问题。正确的做法应该是,获取锁→开启事务→提交事务/回滚事务→释放锁。因此两者结合使用,不能用 @Transactional 注解,得使用手动事务,改造后的代码如下(简易代码,仅仅为了展示问题)

跑测试没有问题,接口正常执行,数据检查下来也没有问题。虽然手动式事务写起来不如注解来的方便,但是灵活度很高,部分复杂业务场景下可以使用

相关推荐
NineData3 小时前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具
神仙别闹3 小时前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
Amnesia0_03 小时前
MYSQL复合查询和内外连接
数据库·mysql
Fanta丶3 小时前
22.MySql order by优化
mysql
JAVA面经实录9174 小时前
Redis 知识体系(完整版)
java·redis·nosql数据库·nosql
哆啦A梦——4 小时前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
ManageEngine卓豪5 小时前
数据库可观测性:MySQL与Redis监控核心监控指标与全栈运维解决方案
数据库·redis·mysql·数据库性能·数据库监控
真实的菜5 小时前
Redis 从入门到精通(十四):Redis 7.x 新特性全解 —— 系列收官之作
数据库·redis·缓存
霸道流氓气质5 小时前
从MySQL到云原生:全面解析阿里云PolarDB数据库及其与MySQL的核心差异
数据库·mysql·云原生
snow@li5 小时前
数据库:MySQL vs PostgreSQL 详尽对比(2026版)
java·mysql·postgresql