其他分享
首页 > 其他分享> > 技能篇:关于缓存数据的一致性探讨

技能篇:关于缓存数据的一致性探讨

作者:互联网

为了更快响应请求,减少不必要的查询,加速数据的处理,数据缓存是我们日常开发绕不过去的环节

image.png

关注公众号,一起交流,微信搜一搜: 潜行前行

缓存的意义

数据的保存,离不开磁盘或者内存的操作。为了永久性的保存,数据最终还是会同步到磁盘上,小流量小并发的系统,直接使用 mysql 进行数据的操作即可满足需求。但面对高并发大流量时,又应该怎么去更新保存读取数据呢?使用内存作为缓冲区,即缓存。CPU 操作内存空间的速度是比磁盘快一个大级别的,内存操作就是在公路上开汽车,磁盘读写则在小道上骑自行车

缓存的不一致性

先更新缓存后更新BD

这个方案基本不可能会被采用的,因为出了问题是不可挽回的。想一想在多线程操作的情况下
image.png

为啥说这个方案不会被采用呢?设想用户下单的场景。第一步:更新缓存里下单状态为成功(假设此时会预定库存);第二步读取到下单成功状态,然后准备去支付(此时第三步更新DB失败了)

先更新DB后更新缓存

先更新数据库后更新缓存同样会存在数据不一致性,请看以下场景
image.png
网络问题可能会导致线程B更新缓存比线程A更快,而在第四步完成之后,缓存失效之前,缓存和数据库就会存在不一致性问题

先删缓存后更新DB

看一下先删缓存后更新DB方案
image.png

延迟双删方案

image.png
可以看到延迟双删方案增加了一步骤,在更新完数据之后,延迟一段时间再删除缓存。至于这几毫秒怎么确定,则需要同学们自己根据相应服务数据的读操作耗时时间确定。延迟删除时间 = 读操作耗时时间 + 浮动时间(大概几十毫秒就行)

先更新DB后删缓存

image.png
该方案也是不能完美解决不了数据的不一致性,但同样可以延迟删除的策略来降低数据不一致性的发生概率

延迟删除

image.png

删除失败,怎么补救

延迟删除,会不会存在删除失败的情况呢,这时怎么办。可以采用下面两种策略来补救

欢迎指正文中错误

参考文章

标签:缓存,DB,更新,缓存数据,一致性,操作,数据,技能
来源: https://www.cnblogs.com/cscw/p/15554402.html