缓存一致性如何保障- 延迟双删

缓存机制

在这里插入图片描述

缓存的一致性

缓存如果发生改变的话,那么,不建议直接做redis缓存中的更新操作
在这里插入图片描述
一般来说是通过Cache Aside Pattern的处理模式,简单来说就是"先写库,再删除缓存"。如果要保持缓存数据绝对的一致性,只能用锁或者分布式锁,但是通常来说,加锁就打打的降低了性能,得不偿失的。

通常来说,如果T1执行了如下操作

  1. T1. 更新库->x1
  2. T2. 删除缓存

但是如果T2执行了如下操作,

  1. T0. 读取库->x0
  2. T3. 发现缓存不存在,更新->x0

在某种极端情况下是会发生这样情形的,这个时候就需要延迟双删策略了

延迟双删

对于T1来说,为了避免更新操作有效,他需要在第一次删除的操作后,在接下来的某个时间段,再次删除缓存,为了避免T2的极端情形,我们可以使用延时MQ来再次删除缓存,保证我们的更新有效。

如果说,上面的极端情形下,一直存在,那么这个场景就说明了API处理的时间太长了,建议优化流程或者加锁。

感觉这种思想有点类似DC(Double Check ),需要再做一次check或者删除来保证我们的数据的一致性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值