自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

高并發(fā)緩存策略大揭秘:面試必備的緩存更新模式解析

開(kāi)發(fā) 架構(gòu)
Write Behind模式和Write Through模式整個(gè)架構(gòu)是一樣的,核心在于write through在緩存數(shù)據(jù)庫(kù)中的更新是同步的,而Write Behind是異步的。

在高并發(fā)場(chǎng)景中,緩存能抵擋大量數(shù)據(jù)庫(kù)查詢,減少數(shù)據(jù)庫(kù)壓力,對(duì)于緩存更新通常有以下幾種模式可以選擇:

? cache aside

? read/write through

? write behind caching

cache aside模式

Cache-aside模式是一種常用的用于管理緩存的模式。它用于確保緩存與底層數(shù)據(jù)源之間的數(shù)據(jù)一致性。以下是cache-aside模式的工作原理:

圖片圖片

1. 從緩存讀?。寒?dāng)有讀取操作請(qǐng)求時(shí),應(yīng)用程序首先檢查緩存中是否存在數(shù)據(jù)。如果在緩存中找到了數(shù)據(jù),則將其返回給調(diào)用者,避免了訪問(wèn)底層數(shù)據(jù)源的需要。

2. 緩存未命中:如果在緩存中未找到數(shù)據(jù),則表示緩存未命中。在這種情況下,應(yīng)用程序從底層數(shù)據(jù)源檢索數(shù)據(jù),并將檢索到的數(shù)據(jù)填充到緩存中。

3. 更新數(shù)據(jù):當(dāng)對(duì)數(shù)據(jù)執(zhí)行寫(xiě)入或更新操作時(shí),應(yīng)用程序首先更新底層數(shù)據(jù)源中的數(shù)據(jù)。然后,清除緩存中的數(shù)據(jù),以確保下一次讀取從數(shù)據(jù)源中檢索到更新后的數(shù)據(jù)。

通常寫(xiě)緩存和寫(xiě)數(shù)據(jù)庫(kù)是兩個(gè)獨(dú)立的事務(wù),選擇先更新緩存還是先更新數(shù)據(jù)庫(kù)都有可能產(chǎn)生數(shù)據(jù)不一致的情況。

先刪緩存,再更新數(shù)據(jù)庫(kù)的問(wèn)題

假設(shè)有兩個(gè)請(qǐng)求A、B。

? 請(qǐng)求A先刪除緩存,此時(shí)還未更新數(shù)據(jù)庫(kù)

? 請(qǐng)求B查詢緩存未命中,然后查詢數(shù)據(jù)庫(kù),查出舊數(shù)據(jù)寫(xiě)入緩存

? 請(qǐng)求A繼續(xù)將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)

? 此時(shí)緩存與數(shù)據(jù)庫(kù)中的數(shù)據(jù)出現(xiàn)了不一致的情況

將緩存更新不做刪除的問(wèn)題

? 請(qǐng)求A先更新了數(shù)據(jù)庫(kù)

? 請(qǐng)求B更新了數(shù)據(jù)庫(kù),并更新了緩存

? 請(qǐng)求A最后更新緩存,此時(shí)請(qǐng)求A的數(shù)據(jù)是臟數(shù)據(jù)。

先更新DB再失效緩存問(wèn)題

先更新DB,再失效緩存也會(huì)出現(xiàn)問(wèn)題。

? 請(qǐng)求A讀取緩存未命中,查詢數(shù)據(jù)庫(kù)成功查到數(shù)據(jù)

? 請(qǐng)求B進(jìn)來(lái)更新數(shù)據(jù)庫(kù)成功,并刪除緩存數(shù)據(jù)

? 請(qǐng)求A將查詢的數(shù)據(jù)寫(xiě)入到緩存中,此時(shí)請(qǐng)求A寫(xiě)入緩存的數(shù)據(jù)已經(jīng)是臟數(shù)據(jù)

read/write through模式

cache aside模式需要應(yīng)用方維護(hù)緩存的讀寫(xiě),對(duì)數(shù)據(jù)和緩存的維護(hù)設(shè)計(jì)侵入代碼,代碼復(fù)雜性增加。read/write through模式彌補(bǔ)了這一問(wèn)題,調(diào)用方無(wú)需管理緩存和數(shù)據(jù)庫(kù)調(diào)用,通過(guò)抽象緩存管理組件維護(hù)緩存和數(shù)據(jù)庫(kù)的讀寫(xiě),解耦業(yè)務(wù)代碼。

read through模式

當(dāng)客戶端請(qǐng)求一個(gè)數(shù)據(jù)時(shí),如果緩存中不存在該項(xiàng)(緩存未命中),緩存系統(tǒng)會(huì)自動(dòng)從后端存儲(chǔ)中加載數(shù)據(jù),然后將其添加到緩存中,并返回給客戶端。對(duì)于后續(xù)的相同請(qǐng)求,數(shù)據(jù)則直接從緩存中獲取,直到緩存過(guò)期或被淘汰。

圖片圖片

write through模式

在write-through模式中,當(dāng)客戶端更新一個(gè)數(shù)據(jù)項(xiàng)時(shí),緩存系統(tǒng)會(huì)同時(shí)更新緩存和后端存儲(chǔ)。這意味著所有的寫(xiě)操作都會(huì)同步地寫(xiě)入緩存和存儲(chǔ),確保二者的數(shù)據(jù)一致性。

圖片圖片

write behind caching模式

Write Behind模式和Write Through模式整個(gè)架構(gòu)是一樣的,核心在于write through在緩存數(shù)據(jù)庫(kù)中的更新是同步的,而Write Behind是異步的。

每次的請(qǐng)求寫(xiě)都是直接更新緩存然后就成功返回,并沒(méi)有同步把數(shù)據(jù)更新到數(shù)據(jù)庫(kù)。而把更新到數(shù)據(jù)庫(kù)的過(guò)程稱為flush,觸發(fā)flush的條件可自定義,如定時(shí)或達(dá)到一定容量閾值時(shí)進(jìn)行flush操作。并且可以實(shí)現(xiàn)批量寫(xiě),合并寫(xiě)等策略,也有效減少了更新數(shù)據(jù)的頻率,這種模式最大的好處就是讀寫(xiě)響應(yīng)非???,吞吐量也會(huì)明顯提升。這種模式也有其他的問(wèn)題,比如數(shù)據(jù)不是強(qiáng)一致性的,因?yàn)榘炎钚碌臄?shù)據(jù)放在緩存里,如果緩存在flush到數(shù)據(jù)庫(kù)之前宕機(jī)了就會(huì)丟失數(shù)據(jù),另外實(shí)現(xiàn)也比較復(fù)雜。

幾種模式對(duì)

模式

優(yōu)點(diǎn)

缺點(diǎn)

Cache Aside

實(shí)現(xiàn)比較簡(jiǎn)單

需要應(yīng)用程序負(fù)責(zé)緩存的讀取和寫(xiě)入操作,代碼侵入較大

Read/Write Through

引入緩存管理組件,緩存和數(shù)據(jù)庫(kù)的維護(hù)對(duì)應(yīng)用程序透明;應(yīng)用代碼入侵小,邏輯更清晰

引入緩存管理組件,實(shí)現(xiàn)更復(fù)雜

Write Behind Caching

讀寫(xiě)直接和緩存交互,異步批量更新數(shù)據(jù)


責(zé)任編輯:武曉燕 來(lái)源: 半畝方塘立身
相關(guān)推薦

2018-07-06 15:04:24

緩存token線程

2018-10-23 10:47:03

高并發(fā)系統(tǒng)緩存

2018-10-24 14:30:30

緩存服務(wù)更新

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務(wù)端

2023-08-01 07:22:25

高并發(fā)系統(tǒng)故障

2022-05-10 08:58:56

CacheHTTP

2021-01-13 05:23:27

緩存數(shù)據(jù)庫(kù)高并發(fā)

2018-07-14 21:59:57

緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2017-12-27 12:01:39

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)

2020-08-27 08:17:05

緩存高并發(fā)系統(tǒng)

2021-03-29 11:51:07

緩存儲(chǔ)存數(shù)據(jù)

2017-02-20 07:47:04

緩存HASH高并發(fā)

2019-01-24 09:42:55

系統(tǒng)高并發(fā)面試

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2018-07-27 10:56:10

2023-11-16 08:22:14

LruCacheAndroid

2019-06-06 10:55:02

JDK高并發(fā)框架

2022-10-19 12:23:50

緩存CDN外部緩存

2019-10-17 16:02:44

高并發(fā)緩存瀏覽器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)