mysql和redis数据最终一致性的解决方案
2022/6/21 2:20:23
本文主要是介绍mysql和redis数据最终一致性的解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
此问题是无法做到100%场景一致性的,只能做到基本一致或者最终一致性。
推荐使用的方案
延时双删
原理:先进行缓存清除,再执行update,最后(延迟N秒)再执行缓存清除。(延迟N秒)的时间要大于一次写操作的时间。
一般执行流程:
- 服务节点删除 redis 主库数据。
- 服务节点修改 mysql 主库数据。
- 服务节点使得当前业务处理 等待一段时间,等 redis 和 mysql 主从节点数据同步成功。
- 服务节点从 redis 主库删除数据。
- 当前或其它服务节点读取 redis 从库数据,发现 redis 从库没有数据,从 mysql 从库读取数据,并写入 redis 主库。
基于MQ的可靠性消息通信
具体步骤如下:
- 把要删除的缓存值或者是要更新的数据库值暂存到消息队列MQ中
- 当删除缓存值或者是更新数据库值成功时,把这些值从消息队列中去除,以免重复操作。
- 当删除缓存值或者是更新数据库值失败时,执行失败策略,重试服务从消息队列中重新读取这些值,然后再次进行删除或更新。
- 删除或者更新失败时,需要再次进行重试,重试超过的一定次数。向业务层发送报错信息。
canal组件
原理:监控mysql主库的binlog日志,把更新后的数据同步到redis中。
使用Binlog实时更新/删除Redis缓存。利用Canal,即将负责更新缓存的服务伪装成一个MySQL的从节点,从MySQL接收Binlog,解析Binlog之后,得到实时的数据变更信息,然后根据变更信息去更新删除Redis缓存。
这篇关于mysql和redis数据最终一致性的解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?