回顾:数据库操作和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

相关内容

热门资讯

4家“中国英伟达”抢着上市 订阅 快刀财经 ▲ 做您的私人商学院各显神通的中国AI芯片。作者:奇偶工作室来源: 奇偶工作室(ID...
“招商系”老将王颖获批担任招商... 近日,国家金融监督管理总局深圳监管局(下称“深圳金融监管局”)发布行政许可批复,正式核准王颖招商信诺...
平安人寿临时提案遭华夏幸福否决... 中国平安(601318.SH)与华夏幸福(600340.SH)之间的百亿纠葛再度升级。继12月17日...
MiniMax递表,把大模型公... 文 / 王浩纯来源 / 节点财经在香港中环的金融心脏地带,一场关于中国 AI 未来的资本竞速正在悄然...
年入10亿的网红按摩仪,要IP... “健康焦虑”这个赛道,挺魔幻的。作者 |渡尘来源 |投资家(ID:touzijias)“健康焦虑”这...