Redis 和 Mysql 如何保证数据一致性?( 二 )


结合双删策略+缓存超时设置,这样最差的情况就是在超时时间内数据存在不一致 。
2、重试方案重试方案有两种实现,一种在业务层做,另外一种实现中间件负责处理 。
然而,该方案有一个缺点,对业务线代码造成大量的侵入 。
流程如下:
1.更新数据库数据;
2.缓存因为种种问题删除失败;
3.将消费消息,获得需要删除的key;
4.自己消费消息,获得需要删除的key;
5.重试删除操作,直到成功 。
而这个放在业务层去处理的话,侵入太高,所以一般是不太推荐使用来解决这个问题 。
但是呢,还有一个就是使用中间件来进行处理 。
启动一个订阅程序去订阅数据库的binlog,获得需要操作的数据 。在应用程序中,另起一段程序,获得这个订阅程序传来的信息,进行删除缓存操作 。
流程如下:
1.更新数据库数据;
2.数据库会将操作信息写入binlog日志当中;
3.订阅程序提取出所需要的数据以及key;
4.另起一段非业务代码,获得该信息;
5.尝试删除缓存操作,发现删除失败;
6.将这些信息发送至消息队列;
7.重新从消息队列中获得该数据,重试操作 。
关于延迟双删除策略,你学会了么?




推荐阅读