mysql与redis数据一致性问题


在项目中经常会同时操作mysql与redis 那么如何保证数据的一致性呢

一般增删改都是先操作MySQL数据库,成功之后再操作Redis,但这里有个问题,如果MySQL操作成功了,但Redis突然出现异常,操作失败,如何回滚MySQL操作。

使用注解@Transactional只会回滚MySQL异常的情况,Redis本身也不具备回滚功能,在MySQL操作成功的情况下,@Transactional注解会认为方法并没有异常,会继续执行而不回滚,这样就导致了MySQL和Redis不一致的情况。

    为了避免这种情况,每次操作Redis之后,都会判断Redis有没有操作成功,操作失败则进行手动回滚,加一行代码:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

 配合@Transactional注解即可解决问题。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM