为扛不住数据量而导致系统不可用
admin
2024-02-07 15:58:23
0

那如果我们把更新数据库放在删除缓存之前呢,问题是否解决?我们继续从读写并发的场景看下去,有没有类似的问题。

时间线程 A(写请求)线程 B(读请求)线程 C(读请求)潜在问题
T1更新主库 X = 99(原值 X = 100)
T2读取数据,查询到缓存还有数据,返回 100线程 C 实际上读取到了和数据库不一致的数据
T3删除缓存
T4查询缓存,缓存缺失,查询数据库得到当前值 99
T5将 99 写入缓存

可以看到,大体上,采取先更新数据库再删除缓存的策略是没有问题的,仅在更新数据库成功到缓存删除之间的时间差内 ——[T2,T3) 的窗口 ,可能会被别的线程读取到老值。

而在开篇的时候我们说过,缓存不一致性的问题无法在客观上完全消灭,因为我们无法保证数据库和缓存的操作是一个事务里的,而我们能做到的只是尽量缩短不一致的时间窗口。

在更新数据库后删除缓存这个场景下,不一致窗口仅仅是 T2 到 T3 的时间,内网状态下通常不过 1ms,在大部分业务场景下我们都可以忽略不计。因为大部分情况下一个用户的请求很难能再 1ms 内快速发起第二次。

但是真实场景下,还是会有一个情况存在不一致的可能性,这个场景是读线程发现缓存不存在,于是读写并发时,读线程回写进去老值。并发情况如下:

时间线程 A(写请求)线程 B(读请求 -- 缓存不存在场景)潜在问题
T1查询缓存,缓存缺失,查询数据库得到当前值 100
T2更新主库 X = 99(原值 X = 100)
T3删除缓存
T4将 100 写入缓存此时缓存的值被显式更新为 100,但是实际上数据库的值已经是 99 了

总的来说,这个不一致场景出现条件非常严格,因为并发量很大时,缓存不太可能不存在;如果并发很大,而缓存真的不存在,那么很可能是这时的写场景很多,因为写场景会删除缓存。

所以待会我们会提到,写场景很多时候实际上并不适合采取删除策略。

(五)总结四种更新策略

终上所述,我们对比了四个更新缓存的手段,做一个总结对比,其中应对方案也提供参考,具体不做展开,如下表:

策略并发场景潜在问题应对方案
更新数据库 + 更新缓存写 + 读线程 A 未更新完缓存之前,线程 B 的读请求会短暂读到旧值可以忽略
写 + 写更新数据库的顺序是先 A 后 B,但更新缓存时顺序是先 B 后 A,数据库和缓存数据不一致分布式锁(操作重)
更新缓存 + 更新数据库无并发线程 A 还未更新完缓存但是更新数据库可能失败利用 MQ 确认数据库更新成功(较复杂)
写 + 写更新缓存的顺序是先 A 后 B,但更新数据库时顺序是先 B 后 A分布式锁(操作很重)
删除缓存值 + 更新数据库写 + 读写请求的线程 A 删除了缓存在更新数据库之前,这时候读请求线程 B 到来,因为缓存缺失,则把当前数据读取出来放到缓存,而后线程 A 更新成功了数据库延迟双删(但是延迟的时间不好估计,且延迟的过程中依旧有不一致的时间窗口)
更新数据库 + 删除缓存值写 + 读(缓存命中)线程 A 完成数据库更新成功后,尚未删除缓存,线程 B 有并发读请求会读到旧的脏数据可以忽略
写 + 读(缓存不命中)读请求不命中缓存,写请求处理完之后读请求才回写缓存,此时缓存不一致分布式锁(操作重)

从一致性的角度来看,采取更新数据库后删除缓存值,是更为适合的策略。因为出现不一致的场景的条件更为苛刻,概率相比其他方案更低。

那么是否更新缓存这个策略就一无是处呢?不是的!

删除缓存值意味着对应的 key 会失效,那么这时候读请求都会打到数据库。如果这个数据的写操作非常频繁,就会导致缓存的作用变得非常小。而如果这时候某些 Key 还是非常大的热 key,就可能因为扛不住数据量而导致系统不可用。

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...