mysql与redis数据一致性问题

 

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

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

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

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

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

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

猜你喜欢

转载自blog.csdn.net/yuyeqianhen/article/details/89509511