mysql和redis数据最终一致性的解决方案

此问题是无法做到100%场景一致性的,只能做到基本一致或者最终一致性。

推荐使用的方案

延时双删

原理:先进行缓存清除,再执行update,最后(延迟N秒)再执行缓存清除。(延迟N秒)的时间要大于一次写操作的时间。一般执行流程:

1、服务节点删除 redis 主库数据

2、服务节点修改 mysql 主库数据。

3、服务节点使得当前业务处理 等待一段时间,等 redis 和 mysql 主从节点数据同步成功。

4、服务节点从 redis 主库删除数据。

5、当前或其它服务节点读取 redis 从库数据,发现 redis 从库没有数据,从 mysql 从库读取数据,并写入 redis 主库。

基于MQ的可靠性消息通信

具体步骤如下:

1、把要删除的缓存值或者是要更新的数据库值暂存到消息队列MQ中

2、当删除缓存值或者是更新数据库值成功时,把这些值从消息队列中去除,以免重复操作。3、当删除缓存值或者是更新数据库值失败时,执行失败策略,重试服务从消息队列中重新读取这些值,然后再次进行删除或更新。

4、删除或者更新失败时,需要再次进行重试,重试超过的一定次数。向业务层发送报错信息

canal组件

原理:监控mysql主库的binlog日志,把更新后的数据同步到redis中。使用Binlog实时更新/删除Redis缓存。利用Canal,即将负责更新缓存的服务伪装成一个MySQL的从节点,从MySQL接收Binlog,解析Binlog之后,得到实时的数据变更信息,然后根据变更信息去更新删除Redis缓存。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月23日
下一篇 2022年6月23日

相关推荐

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息