缓存双写一致性(笔记向)

就是缓存和数据数据一致性?

先操作数据库,还是先操作缓存

为什么

因为先操作缓存,操作数据库报错,缓存又不能回滚。保证数据的一致性

删除缓存还是更新缓存

删除缓存

为什么

更新缓存,或许有无效操作。一次都没操作,又更新了,比如更新了缓存,10分钟没有人用,但是又修改数据,又要改缓存。

删除缓存

下次查询缓存,缓存没有数据,便会去数据库中查。

但是在并发情况也会发生问题

上述只能在单线程情况下,并发就不可以。

就延迟双删,缓一缓,不要那么急,解决并发问题。反正就是容易读到老数据,改数据的时候,读比较快,容易读到老数据。

一个查一个写,查的时候读老数据,另外一个又在写,数据就不一致了。刚好请求b将新值写入数据,请求b删除缓存后,刚好请求a写入缓存。(后续请求访问到又是老数据)

就是那么多刚好。

在并发情况下,为了解决数据一致,要采用双写一致性

延迟双删

延迟一段时间后,再删除缓存,在第一次删除缓存后,延迟一段时间后,再删除一次缓存。

不解决:有些公司他认为在并发情况下,一定不会发生数据不一致,因为他们认为读比写快。

同步延迟:第一次删除缓存,睡眠一会儿,再删除一次缓存。 

响应时间长:用户体验度不好

异步延迟:

在第一次缓存删除之后,另开一个线程,执行第二次缓存删除。 线程池

睡眠再删除第二次,使用线程池单开线程。第二次失败怎么办,再次尝试删除,如果失败再尝试几次。

消息队列延迟:可以事务消息+sleep,或者延迟消息 这个有重试,重试16次扔到死信队列去。为什么要事务消息,因为第一次成功才第二次

这延迟双删总让人不由而然想到es双写,感觉异曲同工之妙。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值