如何保证redis和MySql 数据一致性

  1. 采用延时双删处理
    具体步骤:先删除缓存,再写数据库,休眠一段时间(读数据业务耗时+redis和数据库主从同步耗时),再次删除缓存。
    缺点:
    1. 休眠时间的估算准确性;
    1. 增加了写入请求的耗时;
  1. 异步消息处理
    先读redis,然后写MySql,然后更新redis集群服务器数据。将更新数据发送到消息队列,redis服务器订阅更新数据,然后同步更新。
    缺点:需要部署消费代码同步数据,有一定的开发量。

另一种情况

  1. 在代码层次执行完增删改后执行redis更新。基本没啥优点。代码侵入性高。在并发下还有可能数据不一致。

  2. 基于消息中间件,增删改后将增删改对应表和对应的数据唯一标识放入队列。然后在通过队列消息内容查询数据库更新redis。

  3. 监听数据库更改来实现redis更新。阿里canal可以做到。可以监听数据库日志来实现。

  4. 以上三种方案基于是数据极端事件的数据一致性。还有基于定时调度任务定时对在周期内更新或新增及删除的消息至redis个
    优点:开发过程中一般会根据实际情况来选择,或组合使用

[学习连接]https://mp.weixin.qq.com/s/6WxbY-BOjX_5mwHNgoVl8g

你可能感兴趣的:(如何保证redis和MySql 数据一致性)