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

mysql引入redis后,暂不考虑主从复制和读写分离,我们的策略是:一、读的时候更新缓存呢(推荐)分析如下:我们在操作数据库写的时候,删除缓存,更新数据库,然后在读的时候,更新缓存(这个操作如果不是强一致性的情况下,我们这4步操作都不需要加锁,可以通过设置key的过期时间来解决数据的最终一致性)二、写的时候更新缓存呢(不推荐)分析如下:我们在操作数据库写的时候,去更新缓存,更新数据库,读的时候直接读缓存即可(这样在高并发的场景下,需要保证这二步操作的原子性,影响性能,不推荐)在读.
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

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

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

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

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

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

  • 第一步删除缓存成功,第二步更新数据库失败,
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值