ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-06-20 16:00:40  阅读:126  来源: 互联网

标签:缓存 删除 redis 更新 mysql 一致性 节点


此问题是无法做到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缓存。

标签:缓存,删除,redis,更新,mysql,一致性,节点
来源: https://www.cnblogs.com/yclblogs/p/16391870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有