Redis 如何与数据库事务保持一致

Posted ming-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 如何与数据库事务保持一致相关的知识,希望对你有一定的参考价值。

考虑一个问题,redis 如何 与 数据库保持一致性的问题。

举栗子:如果我们在开发过程中遇到这样的一种情况,我们删除 redis中token 的同时 也需要修改数据库中 储存的 token 的状态为不可用的状态。如果这个时候我们不做处理的话,通常是先删除redis中的token,然后在进行数据库的修改。但是如果这个时候redis中的token删除成功了,但是在执行数据库操作之气程序报错了。那这个时候redis中的token已经被删除了,但是数据库中的token状态还是可用的状态,这个时候就导致了数据不一致的问题。

这时候我们需要使用统一的事务来进行解决这个问题,.但是如果只是单纯的使用数据库事务并不能解决这个问题,因为这个操作也涉及到了redis,所以这个时候我们应该使用 redis事务+数据库的事务 来保证事务一致性的问题。

如果只是单纯添加了 @Transactional(声明式事务)只能保证数据库的数据一致性问题,但是是无法控制redis中的事务的。redis中也是存在事务的。

解决方案:

我们可以使用自定义方法使用编程式事务 我们使用 begin(即控制reids事务也控制数据库事务)、commit、rollback 都需要实现控制redis事务和数据库事务。

 

以上是关于Redis 如何与数据库事务保持一致的主要内容,如果未能解决你的问题,请参考以下文章

如何保持MySQL和Redis的一致性?

如何保持MySQL和Redis的一致性?

mysql 如何解决数据一致性

Redis 设计与实现 --事务

Hibernate中的事务与并发

Redis之事务操作