Redis分布式锁与MySQL事务

1、需求

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

2、问题

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

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

3、解决

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

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

相关推荐
逝水如流年轻往返染尘8 分钟前
MySQL表的增删查改
mysql
laowangpython20 分钟前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
炫酷的伊莉娜2 小时前
【Redis】零碎知识点(易忘 / 易错)总结回顾
redis
万能程序员-传康Kk3 小时前
【Python+flask+mysql】网易云数据可视化分析(全网首发)
python·mysql·信息可视化·数据分析·flask·可视化·网易云
一个天蝎座 白勺 程序猿4 小时前
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
redis·爬虫·python·selenium·scrapy·云原生·k8s
不剪发的Tony老师4 小时前
数据库行业竞争加剧,MySQL 9.3.0 企业版开始支持个人下载
数据库·mysql
追风赶月、5 小时前
【Redis】哨兵(Sentinel)机制
数据库·redis·sentinel
悟能不能悟5 小时前
mysql的not exists走索引吗
数据库·mysql
vvilkim6 小时前
Redis持久化机制详解:保障数据安全的关键策略
数据库·redis·缓存
fengye2071616 小时前
板凳-------Mysql cookbook学习 (二)
学习·mysql·adb