如何保证redis与mysql数据最终一致性

先删redis,再更新mysql 流程图 最后mysql是新数据,redis是旧数据,不能保证最终一致性 先更新mysql,再删redis 流程图 最后mysql是新数据,redis是旧数据 延迟删除: 先更新mysql,然后sleep一段时间,再删除redis 流程图 sleep时间,由业务侧决定,最好是大于查询接口的耗时。 本方案有一...
如何保证redis与mysql数据最终一致性
保证redis与mysql数据最终一致性,有以下几种方案
先更新redis,再更新mysql 流程图
最后mysql是请求1的数据,redis是请求2的数据,不能保证最终一致性
先更新mysql,再更新redis 流程图
最后mysql是请求2的数据,redis是请求1的数据,不能保证最终一致性
先删redis,再更新mysql 流程图
最后mysql是新数据,redis是旧数据,不能保证最终一致性
先更新mysql,再删redis 流程图
最后mysql是新数据,redis是旧数据
延迟删除: 先更新mysql,然后sleep一段时间,再删除redis 流程图
sleep时间,由业务侧决定,最好是大于查询接口的耗时。 本方案有一个问题: 更新mysql后,删除redis之前,查询请求从redis查到的是旧数据,虽然可以保证最终一致性,但是查到旧数据的时间较长
延迟双删: 先删redis,然后更新mysql,然后sleep一段时间,再删除redis。 本方案可以让用户更早查询到新数据。

方案六看起来是所有方案中最优的,但其实还是有问题,比如下面的情况(出现概率极低),如果确实发生了这种情况,只能等key到达过期时间自己失效,或者引入mq等中间件对删除redis失败做重试。
最后,友情提示一下,这个问题是面试高频题,但是面试没法画图,很难描述清楚各种场景,可以用下面的表达方式
2022-07-07
mengvlog 阅读 7 次 更新于 2025-07-20 15:42:30 我来答关注问题0
  •  翡希信息咨询 面试官:如何保证MySQL和Redis中的数据一致性?

    保证MySQL和Redis中的数据一致性,可以采取以下几种策略,但每种策略都有其适用场景和局限性:先更新MySQL再更新Redis:优点:实现相对简单。缺点:可能存在短暂的数据不一致窗口,特别是在高并发场景下,容易导致脏读或数据未及时更新的问题。先更新Redis再更新MySQL:优点:读操作能立即反映最新数据。缺点:...

  •  翡希信息咨询 redis与mysql怎么保证数据一致

    Redis与MySQL保证数据一致性的方法主要是通过MySQL binlog增量订阅消费结合消息队列来实现。具体方法如下:1. 数据操作分工 读操作:热数据主要从Redis中读取,以提高访问速度。 写操作:所有的增删改操作都在MySQL中进行,确保数据的持久化和一致性。2. Redis数据更新机制 增量更新:针对MySQL中的update、i...

  • Redis与MySQL保证数据一致性的方法主要是通过MySQL binlog增量订阅消费结合消息队列来实现。具体来说,可以分为以下几点:1. 数据操作分工: 读操作:热数据主要存储在Redis中,以满足快速读取的需求。 写操作:所有的增、删、改操作都在MySQL中进行,以保证数据的持久性和完整性。2. Redis数据更新机制:...

  •  翡希信息咨询 redis与mysql怎么保证数据一致

    Redis与MySQL保证数据一致性的方法主要是通过MySQL binlog增量订阅消费结合消息队列来实现。具体方法如下:读写分离:读操作:热数据主要存储在Redis中,以提高读取速度。写操作:所有的增删改操作都直接针对MySQL数据库进行,确保数据的持久性和一致性。利用MySQL binlog更新Redis:增量数据更新:当MySQL数据库...

  •  誉祥祥知识 redis与mysql怎么保证数据一致

    Redis与MySQL保证数据一致的方法主要有以下几点:读写分离:读Redis:热数据主要存储在Redis中,这样读取操作可以直接从Redis中获取,提高响应速度。写MySQL:所有的增删改操作都直接针对MySQL进行,确保数据的持久化和一致性。利用MySQL binlog更新Redis:增量更新:MySQL的binlog记录了所有的数据变更操作,如...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部