這篇文章主要講解了“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”吧!
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、梨樹ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的梨樹網(wǎng)站制作公司
緩存系統(tǒng)涉及的問題和知識(shí)點(diǎn)是比較多的,我主要分為以下幾個(gè)方面來(lái)跟大家探討:
穩(wěn)定性
正確性
可觀測(cè)性
規(guī)范落地和工具建設(shè)
首先,我們講數(shù)據(jù)一致性的前提是我們DB的更新和緩存的刪除不會(huì)當(dāng)成一個(gè)原子操作來(lái)看待,因?yàn)樵诟卟l(fā)的場(chǎng)景下,我們不可能引入一個(gè)分布式鎖來(lái)把這兩者綁定為一個(gè)原子操作,如果綁定的話就會(huì)很大程度上影響并發(fā)性能,而且增加系統(tǒng)復(fù)雜度,所以我們只會(huì)追求數(shù)據(jù)的最終一致性,且本文只針對(duì)非追求強(qiáng)一致性要求的高并發(fā)場(chǎng)景,金融支付等同學(xué)自行判斷。
常見數(shù)據(jù)更新方式有兩大類,其余基本都是這兩類的變種:
先刪緩存,再更新數(shù)據(jù)庫(kù)
這種做法是遇到數(shù)據(jù)更新,我們先去刪除緩存,然后再去更新DB,如左圖。讓我們來(lái)看一下整個(gè)操作的流程:
A請(qǐng)求需要更新數(shù)據(jù),先刪除對(duì)應(yīng)的緩存,還未更新DB
B請(qǐng)求來(lái)讀取數(shù)據(jù)
B請(qǐng)求看到緩存里沒有,就去讀取DB并將舊數(shù)據(jù)寫入緩存(臟數(shù)據(jù))
A請(qǐng)求更新DB
可以看到B請(qǐng)求將臟數(shù)據(jù)寫入了緩存,如果這是一個(gè)讀多寫少的數(shù)據(jù),可能臟數(shù)據(jù)會(huì)存在比較長(zhǎng)的時(shí)間(要么有后續(xù)更新,要么等待緩存過期),這是業(yè)務(wù)上不能接受的。
先更新數(shù)據(jù)庫(kù),再刪除緩存
上圖的右側(cè)部分可以看到在A更新DB和刪除緩存之間B請(qǐng)求會(huì)讀取到老數(shù)據(jù),因?yàn)榇藭r(shí)A操作還沒有完成,并且這種讀到老數(shù)據(jù)的時(shí)間是非常短的,可以滿足數(shù)據(jù)最終一致性要求。
上圖可以看到我們用的是刪除緩存,而不是更新緩存,原因如下圖:
上圖我用操作代替了刪除或更新,當(dāng)我們做刪除操作時(shí),A先刪還是B先刪沒有關(guān)系,因?yàn)楹罄m(xù)讀取請(qǐng)求都會(huì)從DB加載出最新數(shù)據(jù);但是當(dāng)我們對(duì)緩存做的是更新操作時(shí),就會(huì)對(duì)A先更新緩存還是B先更新緩存敏感了,如果A后更新,那么緩存里就又存在臟數(shù)據(jù)了,所以 go-zero 只使用刪除緩存的方式。
我們來(lái)一起看看完整的請(qǐng)求處理流程:
注意:不同顏色代表不同請(qǐng)求。
請(qǐng)求1更新DB
請(qǐng)求2查詢同一個(gè)數(shù)據(jù),返回了老的數(shù)據(jù),這個(gè)短時(shí)間內(nèi)返回舊數(shù)據(jù)是可以接受的,滿足最終一致性
請(qǐng)求1刪除緩存
請(qǐng)求3再來(lái)請(qǐng)求時(shí)緩存里沒有,就會(huì)查詢數(shù)據(jù)庫(kù),并回寫緩存再返回結(jié)果
后續(xù)的請(qǐng)求就會(huì)直接讀取緩存了
另外留一個(gè)問題大家可以思考下,對(duì)于下圖的場(chǎng)景,我們?cè)撛趺磻?yīng)對(duì)?
感謝各位的閱讀,以上就是“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!