2023-08-03 10:19:20來(lái)源:今日頭條
Cache-Aside模式一種常用的緩存方式,通常是把數(shù)據(jù)從主存儲(chǔ)加載到KV緩存中,加速后續(xù)的訪問(wèn)。在存在重復(fù)度的場(chǎng)景,Cache-Aside可以提升服務(wù)性能,降低底層存儲(chǔ)的壓力,缺點(diǎn)是緩存和底層存儲(chǔ)會(huì)存在不一致。
業(yè)務(wù)場(chǎng)景和面臨問(wèn)題在開發(fā)應(yīng)用時(shí),使用緩存被多次訪問(wèn)的數(shù)據(jù)是常見(jiàn)的操作。但是,緩存和底層存儲(chǔ)的數(shù)據(jù)完全一致是一種不切實(shí)際的想法。我們需要一種策略,來(lái)保證緩存里的數(shù)據(jù)盡量及時(shí)更新,同時(shí)也要能夠檢測(cè)并應(yīng)對(duì)緩存數(shù)據(jù)過(guò)期的情況。
解決方案很多商業(yè)化的緩存訪問(wèn)提供了 read-throgh 和write-through/write-behind 的操作。這種模式下,讀寫都要先經(jīng)過(guò)緩存,操作流程是這樣的:
(資料圖片僅供參考)
如果緩存不提供數(shù)據(jù)同步能力,應(yīng)用層就要負(fù)責(zé)數(shù)據(jù)在緩存和底層存儲(chǔ)的同步。
使用cache-aside策略,應(yīng)用層能夠模擬read-through緩存的能力。這種策略會(huì)要求應(yīng)用層按需把數(shù)據(jù)加載進(jìn)緩存,下圖給出了存儲(chǔ)數(shù)據(jù)的過(guò)程:
如果應(yīng)用層更新了數(shù)據(jù),就可以采用write-through策略。做法也比較簡(jiǎn)單:1)修改底層存儲(chǔ)的數(shù)據(jù);2)將緩存里的這條數(shù)據(jù)置為失效(刪除/過(guò)期)。
下一次這條數(shù)據(jù)被請(qǐng)求時(shí),使用cache-aside策略:1)應(yīng)用層從底層存儲(chǔ)獲取更新后的數(shù)據(jù);2)寫入緩存。
存在問(wèn)題和注意事項(xiàng)在此用這個(gè)模式時(shí),需要考慮以下幾點(diǎn):
緩存數(shù)據(jù)的生命周期。很多緩存實(shí)現(xiàn)方案會(huì)設(shè)置過(guò)期時(shí)間,如果數(shù)據(jù)在一段時(shí)間內(nèi)沒(méi)有被訪問(wèn),緩存中置為失效并逐出這條數(shù)據(jù)。為了保證cache-aside模式有效,需要保證緩存失效機(jī)制與數(shù)據(jù)的訪問(wèn)模式是一致的。如果緩存失效時(shí)間太短,可能會(huì)導(dǎo)致應(yīng)用層反復(fù)從底層存儲(chǔ)獲取數(shù)據(jù)寫入緩存。如果緩存過(guò)期時(shí)間太長(zhǎng),緩存的數(shù)據(jù)很可能是過(guò)期的,與底層存儲(chǔ)不一致。對(duì)于半靜態(tài)的數(shù)據(jù)(更新頻次低)或讀取頻繁的數(shù)據(jù)進(jìn)行緩存,能達(dá)到最好的效果。
逐出數(shù)據(jù)。相對(duì)于底層存儲(chǔ),緩存的容量一般是有限的,必須要是需要逐出數(shù)據(jù)。很多緩存采用LRU機(jī)制,當(dāng)然我們也可以自己定制逐出機(jī)制。通常為了保證緩存的性價(jià)比,所有數(shù)據(jù)都會(huì)被配置一個(gè)全局的緩存過(guò)期屬性。有個(gè)別例外的情況,比如從底層存儲(chǔ)中獲取一份數(shù)據(jù)項(xiàng)效率非常低(讀取頻率一般),另一份數(shù)據(jù)項(xiàng)從底層存儲(chǔ)獲取效率高(讀取頻率也高),那么緩存獲取效率低的數(shù)據(jù)收益可能更大。
服務(wù)啟動(dòng)時(shí)填充緩存。一些場(chǎng)景下,服務(wù)啟動(dòng)時(shí),會(huì)把存量數(shù)據(jù)加載到緩存里。這種情況下如果有數(shù)據(jù)過(guò)期或被逐出的情況,同樣可以采用cache-aside模式。
數(shù)據(jù)一致性。cache-aside模式并不能保證緩存和底層存儲(chǔ)的數(shù)據(jù)一致性。存儲(chǔ)里的數(shù)據(jù)任何時(shí)候都可能被更改,如果是外部服務(wù),緩存可能感知不到數(shù)據(jù)更新。如果一個(gè)系統(tǒng)中,多個(gè)存儲(chǔ)都存了數(shù)據(jù)的備份,頻繁發(fā)生數(shù)據(jù)同步的情況下,數(shù)據(jù)不一致的情況會(huì)更嚴(yán)重。
本地緩存,也叫內(nèi)存緩存。數(shù)據(jù)緩存在服務(wù)實(shí)例的內(nèi)存中,是有該實(shí)例能訪問(wèn)。如果服務(wù)實(shí)例頻繁訪問(wèn)同樣的數(shù)據(jù),也可以使用Cache-Aside模式。但是本地緩存是允許本服務(wù)實(shí)例訪問(wèn),不同的服務(wù)實(shí)例都在本地內(nèi)存存儲(chǔ)了一份數(shù)據(jù)。不同實(shí)例的緩存很快變得不一致,這就需要更頻繁地刷新緩存中的數(shù)據(jù)。在這類場(chǎng)景中,可以考慮使用分片或分布式緩存方案。
應(yīng)用場(chǎng)景適用場(chǎng)景:
緩存并不提供原生的 read-through 或 write-through 的能力。資源需求無(wú)法預(yù)估的場(chǎng)景。cache-aside模式允許應(yīng)用按需加載數(shù)據(jù)到緩存,不需要提前對(duì)數(shù)據(jù)的需求量進(jìn)行評(píng)估。不適用場(chǎng)景:
緩存數(shù)據(jù)是靜態(tài)的。如果緩存空間能容納這些數(shù)據(jù),可以在服務(wù)啟動(dòng)時(shí)填充緩存,并采用一些策略避免其過(guò)期。Web農(nóng)場(chǎng)托管的大量Web應(yīng)用,如果Web應(yīng)用支持親和性調(diào)度(client傾向于找上次服務(wù)過(guò)的server),client/server之間盡量不要引入額外依賴,比如session信息緩存。關(guān)鍵詞:
Cache-Aside模式一種常用的緩存方式,通常是把數(shù)據(jù)從主存儲(chǔ)加載到KV緩
“紅豆生南國(guó)”,南方總是與文藝的生活方式有關(guān)。如果南方是一本書,封
臨武二中新校區(qū)為什么不給高三投訴直通車是湖南日?qǐng)?bào)、華聲在線、新湖南
【法問(wèn)】本期主持人:工人日?qǐng)?bào)-中工網(wǎng)記者柳姍姍彭冰讀者來(lái)信編輯您好!
湖南日?qǐng)?bào)·新湖南客戶端8月3日訊(通訊員袁程)愛(ài)玩水是小朋友的天性,
在過(guò)去的2022年,輝瑞制藥有限公司(下稱“輝瑞”)成為全球首個(gè)年收入
圖片來(lái)源@視覺(jué)中國(guó)文|奇偶派,作者?|葉子、星光,編輯?|釗每當(dāng)我們談
日前,以“喝彩中國(guó)加多寶@U”為主題的2023加多寶城市罐發(fā)布會(huì)在杭州大
據(jù)《世界體育報(bào)》報(bào)道,登貝萊告訴哈維,他選擇加盟巴黎圣日耳曼是出于
往身上澆涼水,追著路人搭訕……在人頭攢動(dòng)的街頭,有一些主播通過(guò)這樣
北京市防汛辦提示,規(guī)劃自然資源委聯(lián)合市氣象局繼續(xù)發(fā)布地質(zhì)災(zāi)害氣象風(fēng)
中國(guó)紅十字會(huì)官微消息,8月1日,根據(jù)北京、天津、河北?。ㄊ校┘t十字會(huì)
盡管SSD不斷侵蝕市場(chǎng),但在大容量數(shù)據(jù)市場(chǎng)上,HDD機(jī)械硬盤依然是繞不過(guò)
智通財(cái)經(jīng)獲悉,香港聯(lián)交所最新資料顯示,7月31日,美國(guó)資本集團(tuán)減持康
炎炎夏日,汗流浹背,如果不及時(shí)喝水,很容易導(dǎo)致脫水,甚至導(dǎo)致中暑、