回顾:数据库操作和redis缓存中的事务回滚问题
创始人
2025-06-01 10:13:00

实际的开发场景:在一个需要根据id批量删除数据库中的数据,同时也要redis缓存中的数据。那么如何保证数据库操作与Redis缓存操作的一致性,在CRUD出错时,保证回滚。

问题:

1、数据库开启事务,即可在操作失误时,回滚之前的已经做过的操作,保证操作原子性。

2、Redis的事务并不支持回滚功能,Redis命令在事务处理期间发生错误,原先的操作并不会回滚

3、我们都知道,需要先操作数据库再操作缓存,这样大概率会避免并发和很多错误问题。但是MySQL操作成功,而Redis异常,此时缓存数据不一致,如何回滚Mysql操作又是一个问题。

解决方案:

1、在Service方法上使用spring的@Transactional注解回滚MySQL异常

注:@Transactional只会回滚MySQL的异常,其后发生的Redis异常并不会让其回滚数据库。Redis也不会回滚(这个和Redis采用的设计策略有关:不对回滚支持,保证操作的简单快速)

对Redis操作进行解耦,并且进行判断操作有无成功,如果出错,抛出unchecked异常(比如runtimeException)

这样:Redis出错,MySQL回滚的问题。配合@Transactional注解就解决了

而问题2 就需要根据自身的情况,对Redis中已经产生的数据进行删除即可。

reids解耦

https://blog.csdn.net/w1014074794/article/details/106071104

事务失效场景

https://blog.csdn.net/weixin_54401017/article/details/129598621

相关内容

热门资讯

通威“抄底”青海丽豪,光伏行业... 尽管2025年净亏损约90亿元至100亿元,通威股份(600438)却在2026年打起了并购牌。2月...
243轮鏖战、10万人围观!越... 广州土拍诞生了新“地王”。从2月25日早10时到晚19时,历经243轮鏖战,广州天河区马场地块1期地...
罕见露脸!希音许仰天砸百亿押注... 文 / 安妮来源 / 节点财经开工第一天,广东又放大招了。广东高质量发展大会如期刷屏,而今年最意外的...
知情人士:因侵权被判赔小米50... 红星资本局2月25日消息,小米法务部昨日发文称,自媒体账号“AutoReport汽车产经”因侵权,一...
高瓴首次减持格力电器:珠海明骏... 格力电器第一大股东珠海明骏拟减持公司股份。2月25日,珠海格力电器股份有限公司(格力电器,00065...