您好,登錄后才能下訂單哦!
這篇文章主要講解了“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”吧!
緩存系統(tǒng)涉及的問(wèn)題和知識(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é)自行判斷。
常見(jiàn)數(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)求看到緩存里沒(méi)有,就去讀取DB并將舊數(shù)據(jù)寫(xiě)入緩存(臟數(shù)據(jù))
A請(qǐng)求更新DB
可以看到B請(qǐng)求將臟數(shù)據(jù)寫(xiě)入了緩存,如果這是一個(gè)讀多寫(xiě)少的數(shù)據(jù),可能臟數(shù)據(jù)會(huì)存在比較長(zhǎng)的時(shí)間(要么有后續(xù)更新,要么等待緩存過(guò)期),這是業(yè)務(wù)上不能接受的。
先更新數(shù)據(jù)庫(kù),再刪除緩存
上圖的右側(cè)部分可以看到在A更新DB和刪除緩存之間B請(qǐng)求會(huì)讀取到老數(shù)據(jù),因?yàn)榇藭r(shí)A操作還沒(méi)有完成,并且這種讀到老數(shù)據(jù)的時(shí)間是非常短的,可以滿足數(shù)據(jù)最終一致性要求。
上圖可以看到我們用的是刪除緩存,而不是更新緩存,原因如下圖:
上圖我用操作代替了刪除或更新,當(dāng)我們做刪除操作時(shí),A先刪還是B先刪沒(méi)有關(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í)緩存里沒(méi)有,就會(huì)查詢數(shù)據(jù)庫(kù),并回寫(xiě)緩存再返回結(jié)果
后續(xù)的請(qǐng)求就會(huì)直接讀取緩存了
另外留一個(gè)問(wèn)題大家可以思考下,對(duì)于下圖的場(chǎng)景,我們?cè)撛趺磻?yīng)對(duì)?
感謝各位的閱讀,以上就是“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。