mysql主从复制(读写分离)数据不一致解决方案(^_^^_^^_^)

在MySQL引入Redis后,针对主从复制和读写分离可能导致的数据不一致问题,提出了两种策略:读时更新缓存和写时更新缓存。通过分析并发场景下的问题及解决方案,建议通过设置缓存过期时间来实现最终一致性。对于主从复制延迟导致的数据不一致,提出了在主从复制延时时间内强制读主库并更新缓存的方法,确保强一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql引入redis后,暂不考虑主从复制和读写分离,我们的策略是:

一、读的时候更新缓存呢(推荐)

分析如下:我们在操作数据库写的时候,删除缓存,更新数据库,然后在读的时候,更新缓存(这个操作如果不是强一致性的情况下,我们这4步操作都不需要加锁,可以通过设置key的过期时间来解决数据的最终一致性)

二、写的时候更新缓存呢(不推荐)

分析如下:我们在操作数据库写的时候,去更新缓存,更新数据库,读的时候直接读缓存即可(这样在高并发的场景下,需要保证这二步操作的原子性,影响性能,不推荐)

在读的时候更新缓存又存在二个方面问题(暂不考虑主从复制和读写分离):

(1)写操作时,是先删除缓存,在更新数据库呢

问题一、如果在高并发的场景下,会出现数据库与缓存数据不一致

  1. 线程 A 删除了缓存 线程 B 查询,发现缓存已不存在
  2. 线程 B 去数据库查询得到旧值
  3. 线程 B 将旧值写入缓存
  4. 线程 A 将新值写入数据库

如何解决?设置缓存的过期时间,这样可以达到最终一致性

问题二、如果删除缓存失败或更新数据库失败了会怎样?

  • 第一步删除缓存成功,第二步更新数据库失败,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值