redis缓存和数据库一致性

  • redis和数据库的双写一致性一直是个比较高频的面试题,今天来给大家说一说双写一致性
  • 一致性

  • 强一致性 : 对于用户来说 体验感最好,写入什么读取的就是什么
  • 弱一致性 : 系统不保证写入什么就读取什么,但会尽可能保证在一定的时间后可以保证写入的和读取的相同
  • 最终一致性 : 是业界推崇的模型,也是弱一致性的一种, 在一定的时间后 保证数据一致性
  • redis与数据库双写一致性

  • 一般来说, 写入的时候, 先写入数据库,在删除缓存
  • 抛出一个问题 , 为什么先写入数据库?可以先写入缓存吗? 以及可以先删除缓存,在更新数据库吗?

  • 第一个问题: 为什么先写入数据库?
  • 假设先写入缓存,A B 两个线程,A写入缓存 - > A写入数据库时候失败了->产生脏数据
  • A写入缓存->B写入缓存 ->B写入数据库成功->A写入数据库成功 : 导致不一致性
  • 先删除缓存,在更新数据库

  • A删除缓存->这时候B读取了数据库 并且把数据放入了缓存中->A更新了数据库 : 导致数据不一致
  • 解决双写一致性

  • 可以使用延时删除 , 先删除一遍缓存 ->更新数据库->隔了一定的时间 再次删除缓存
  • 如果二次删除失败怎么办呢?

  • 那么可以使用 mq 来进行重试操作, 可以使用rocketmq , rocketmq可以保证消息消费成功才会被删除
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值