Transactional注解的方法中数据库和redis的回滚问题

问题背景:如果某个方法加了Transactional注解,而这个方法中既包括mysql事务又包括redis事务,那么如何做到mysql和redis都回滚?

mysql事务支持回滚,但redis的事务是不支持回滚的,但它俩都在当前方法的事务里面,所以,无论是mysql操作失败还是redis操作失败,都要将mysql和redis中的数据都恢复到之前的状态,以免发生数据不一致的问题。

比如,我们有一个进行db和redis数据更新的方法dataUpdate,这个方法上我们加了Transactional注解,为了保证db和redis数据的最终一致性,我们使用了延迟双删策略,所以这个方法的逻辑是:删redis -> update db -> 删redis,为了确保不管在这三步中的哪一步执行失败了,都让db和redis回滚,我们可以这么做:

1、定义删除redis的方法delInRedis,给此方法声明抛出异常,让它在执行失败时抛出某个类型的异常,比如我们自定义的一个异常类MyRedisOperationException,为dataUpdate方法的Transactional注解设置rollbackFor属性,让它指向MyRedisOperationException这类异常;

2、update db这一步,如果出现了执行失败,我们要写finally语句块,在finally内部执行redis数据的重新写入,以回滚第一步对于redis的删除操作。

相关推荐
一米阳光866141 分钟前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
奈斯先生Vector1 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
建筑工程企业管理系统3 小时前
erp工程项目管理系统落地价值:实现工程多项目成本精细化核算与管控
大数据·数据库·人工智能
AI大模型-小华3 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
foolishlee4 小时前
Neon wal日志处理流程2
数据库
2601_965798475 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
Cloud云卷云舒5 小时前
海山数据库(HaishanDB)面向工业云场景技术方案
数据库·haishandb·工业云·移动云海山数据库·天工云
逃逸线LOF5 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring
Valora6 小时前
简单学会redis
redis
严同学正在努力8 小时前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai