溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

發(fā)布時(shí)間:2021-10-09 14:32:26 來(lái)源:億速云 閱讀:102 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)”吧!

Previously

緩存系統(tǒng)涉及的問(wèn)題和知識(shí)點(diǎn)是比較多的,我主要分為以下幾個(gè)方面來(lái)跟大家探討:

  • 穩(wěn)定性

  • 正確性

  • 可觀測(cè)性

  • 規(guī)范落地和工具建設(shè)

緩存正確性

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

數(shù)據(jù)更新常見(jiàn)做法

首先,我們講數(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ù)

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

這種做法是遇到數(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ù),再刪除緩存

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

上圖的右側(cè)部分可以看到在A更新DB和刪除緩存之間B請(qǐng)求會(huì)讀取到老數(shù)據(jù),因?yàn)榇藭r(shí)A操作還沒(méi)有完成,并且這種讀到老數(shù)據(jù)的時(shí)間是非常短的,可以滿足數(shù)據(jù)最終一致性要求。

上圖可以看到我們用的是刪除緩存,而不是更新緩存,原因如下圖:

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

上圖我用操作代替了刪除或更新,當(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)求處理流程:

緩存系統(tǒng)設(shè)計(jì)有哪些性質(zhì)

注意:不同顏色代表不同請(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ì)

感謝各位的閱讀,以上就是“緩存系統(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)注!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI