【Redis篇】如何保证缓存和数据库的一致性?

如何保证缓存和数据库的一致性?

知识点:对缓存的操作一般都是删除而不是更新操作

按照操作顺序可以分为以下几种:

1. 先删除缓存,后更新数据库

1. 存在的问题

A请求删除缓存后,还未更新数据库的时候,突然!B请求来了(一次查询操作),查缓存发现没数据,就去数据库查询,B请求把老的数据查询出来,并放到缓存中,之后A请求将数据库更新

2. 结果

缓存的数据是老的,数据库的是新的

大概率事件,因为B请求的查询速度>A请求的更新速度,很可能存在的

2. 先更新数据库,后删除缓存(感觉用这个方法没啥问题的)

1. 存在的问题

小概率情况下可能会存在脏读:缓存刚好失效,A请求直接查询数据库(旧值),突然!来了个B请求(一次更新操作),一气呵成,更新了数据库,且删除了缓存,之后,A请求将查询到的旧值写入缓存

2. 结果

缓存的数据是老的,数据库的是新的,A请求出现了脏读

总结:缓存刚好失效,A查询到旧值还没来得及操作redis,刚好B请求来一波操作(更新数据库、删除缓存)

小概率事件?因为读速度远大于写速度,B请求很难做到一气呵成,所以一般做到这个情况就可以了

3. 缓存延时双删:实现最终一致性

先删缓存,再更新数据库,延迟1s,再删缓存

1. 问:延迟多久怎么判断

确保确保读请求结束,写请求可以删除读请求造成的缓存脏数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值