如何保证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 阅读 212 次 更新于 2025-09-08 21:57:03 我来答关注问题0
  •  翡希信息咨询 Redis 如何保持和 MySQL 数据一致

    先删除 Redis 缓存再更新 MySQL:在某些情况下,为了避免缓存脏读,可以先删除 Redis 中的缓存数据,然后再更新 MySQL。但这种方式需要确保在删除缓存和更新数据库之间没有其他并发写操作,否则可能会导致数据不一致。二、数据类型与场景区分 MySQL 处理实时性数据,如金融数据、交易数据等,这些数据对一致...

  •  文暄生活科普 高频面试题:如何保证MySQL与Redis数据同步一致性

    三、数据一致性解决方案为了确保MySQL与Redis之间的数据一致性,可以采取以下方案:使用分布式锁 在更新缓存前,先获取一个分布式锁,以确保同一时间只有一个线程能够更新缓存。这种方法虽然能够解决并发问题,但会影响写入性能。因此,通常建议结合缓存过期时间使用,以平衡性能和一致性。消息队列 利用消息队列(...

  •  文暄生活科普 如何保障mysql和redis之间的数据一致性?

    主动加载模式:由于操作本身不具有幂等性,需要考虑加载的有序性问题,可采取MQ的分区机制实现串行化处理,确保缓存和MySQL数据的最终一致性。通过以上策略,可以有效地保障MySQL和Redis之间的数据一致性,提高系统的可靠性和稳定性。

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

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

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

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

mySQL相关话题

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