Redis分布式锁与MySQL事务

1、需求

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

2、问题

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

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

3、解决

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

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

相关推荐
夕除几秒前
redis--ziplist
redis
太理摆烂哥44 分钟前
MySQL表的约束
数据库·mysql
2301_32241428041 小时前
基于SSM框架的在线考试管理系统的设计与实现14750-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·redis·mysql·tomcat·maven·mybatis·ssm
我星期八休息1 小时前
Redis 的原理和使用(2)
前端·数据库·redis·python·mysql·缓存·bootstrap
川石课堂软件测试2 小时前
JMeter异步接口测试实战
数据库·python·jmeter·mysql·kubernetes·测试用例·prometheus
螺蛳粉 螺蛳粉2 小时前
Hadoop第四篇:把 DBA 的巡检清单变成一键体检:AI SSH 运维 Agent 实战 MySQL 篇
mysql·dba·主从复制·运维自动化·数据库巡检·ai运维·智能运维aiops
LuminousCPP2 小时前
数据库学习笔记(二):MySQL 基础操作入门|在 CentOS Stream 10 上连接、建库与建表
数据库·经验分享·笔记·学习·mysql·centos
Gh0st_Lx3 小时前
【1】MySQL MVCC 与隔离级别
数据库·mysql·mvcc
这个DBA有点耶17 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
ProcessOn19 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server