文章目录
- Redis与Mysql数据一致性的情况有哪些?
- Redis与Mysql数据保持一致性的方案?
- 同步双写机制
- 删除缓存重新加载机制
- 延迟双删机制
- 利用MQ保持数据一致性
- 本篇小结
更多相关内容可查看
Redis与Mysql数据一致性的情况有哪些?
Redis和MySQL是两种不同类型的数据库,它们在数据存储和处理的方式上存在一些差异。以下是一些可能导致Redis与MySQL数据不一致的情况:
- 缓存同步延迟: Redis通常被用作缓存层来提高读取性能,而MySQL作为主要的持久化存储。如果应用程序在写入MySQL后未及时更新Redis缓存,就会导致Redis中的数据与MySQL中的数据不一致。这种情况通常发生在系统架构设计不当或者缓存策略设置有问题的情况下。
- 缓存过期策略: Redis中的数据可以设置过期时间。如果数据在MySQL中发生变化,而Redis中的数据尚未过期或更新,就会导致数据不一致。这种情况下,缓存的过期策略需要根据业务需求和数据更新频率进行调整。
- 网络或系统故障: 在数据传输过程中,网络故障或服务器故障可能导致部分数据未正确同步到Redis或MySQL,从而导致数据不一致。
- 并发写入操作: 如果在并发写入的情况下,同时对MySQL和Redis进行写入操作,有可能会导致数据不一致。这是因为MySQL和Redis操作的原子性不同,MySQL支持ACID(原子性、一致性、隔离性、持久性),而Redis的操作不保证强一致性。
Redis与Mysql数据保持一致性的方案?
同步双写机制
先更新Mysql,再更新Redis,这个时候如果更新Redis失败,可能仍然不⼀致
删除缓存重新加载机制
先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中
⽐如线程1删除了 Redis缓存数据,还没有来得及更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中
延迟双删机制
Redis 的延迟双删策略:
在 Redis 中,主节点和从节点之间的数据同步通常通过主从复制实现。Redis 使用主从复制来实现数据的备份和读写分离,其中主节点负责处理写请求,从节点负责处理读请求。
Redis 的延迟双删策略通常是指在主节点执行删除操作后,不立即向所有从节点发送删除指令,而是将待删除键的信息放入一个待删除键列表中。然后,定期或根据一定条件,主节点将待删除键列表中的键发送给所有从节点。从节点收到待删除键列表后,首先将列表中的键标记为待删除状态,而不是立即删除。在一段时间后,再次检查待删除键列表,如果这些键仍然存在,表示可能有读请求在此期间访问了这些键,那么就执行第二次删除操作,确保从节点的数据与主节点保持一致。
MySQL 的延迟双删策略:
在 MySQL 主从复制中,主库(master)负责处理写操作,从库(slave)负责复制主库的数据。在 MySQL 中,为了保证主从复制的数据一致性,通常会使用延迟双删策略。
MySQL 的延迟双删策略类似于 Redis,主要是指主库在执行删除操作后,并不立即向所有从库发送删除指令,而是将待删除数据的信息先记录到 binlog 中。从库在读取 binlog 并执行删除操作时,也会先将待删除数据标记为待删除状态,然后等待一段时间。在此期间,如果发现有查询操作需要读取已经被标记为待删除的数据,那么就暂时不执行删除操作,以保证数据的一致性。在一定时间后,再次检查待删除数据,如果依然存在,则执行删除操作。
4. 对于一致性要求不高的场景, 也可以使用MQ异步同步, 保证数据的最终一致性 , 不需要直接删除
利用MQ保持数据一致性
对于一致性要求不高的场景, 也可以使用MQ异步同步, 保证数据的最终一致性 , 不需要直接删除
本篇小结
其他Redis的相关问题链接如下
Redis数据持久化策略
Redis数据过期策略
Redis数据淘汰策略
Redis集群方案
Redis主从同步
Redis分片集群如何存储及读取数据
Redis的缓存穿透、缓存击穿、缓存雪崩及解决方案
Redis分布式锁实现方式