Redis分布式锁与MySQL事务

1、需求

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

2、问题

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

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

3、解决

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

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

相关推荐
Leo18710 小时前
MySQL 回表(Back to Table)详解
数据库·mysql
遇见火星10 小时前
MySQL 8.0复制架构主从自动切换脚本
mysql·adb·架构·mysql8.0·mysql主从
不知江月待何人..10 小时前
MySQL服务无法启动问题
数据库·mysql
李少兄11 小时前
一文搞懂什么是关系型数据库?什么是非关系型数据库?
数据库·redis·mysql·mongodb·nosql
会开花的二叉树11 小时前
即时通讯系统核心模块实现
数据库·mysql·elasticsearch
兔丝12 小时前
ThinkPHP8 常见并发场景解决方案文档
redis·后端
四谎真好看13 小时前
MySQL 学习笔记(运维篇1)
运维·数据库·笔记·学习·mysql·学习笔记
遇见火星15 小时前
MySQL 5.7/8.0 物理备份实战:XtraBackup 全量+增量+验证+恢复
数据库·mysql·adb·xtrabackup·mysql8.0
妄汐霜15 小时前
小白学习笔记(MySQL增删改查)
笔记·学习·mysql
咕噜企业分发小米15 小时前
阿里云函数计算如何与ECS共享MySQL数据库?
数据库·mysql·阿里云