偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

在高并發(fā)場景中,緩存能抵擋大量數(shù)據(jù)庫查詢,減少數(shù)據(jù)庫壓力,對(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)用者,避免了訪問底層數(shù)據(jù)源的需要。

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

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

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

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

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

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

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

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

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

將緩存更新不做刪除的問題

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

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

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

先更新DB再失效緩存問題

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

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

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

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

read/write through模式

cache aside模式需要應(yīng)用方維護(hù)緩存的讀寫,對(duì)數(shù)據(jù)和緩存的維護(hù)設(shè)計(jì)侵入代碼,代碼復(fù)雜性增加。read/write through模式彌補(bǔ)了這一問題,調(diào)用方無需管理緩存和數(shù)據(jù)庫調(diào)用,通過抽象緩存管理組件維護(hù)緩存和數(shù)據(jù)庫的讀寫,解耦業(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ù)則直接從緩存中獲取,直到緩存過期或被淘汰。

圖片圖片

write through模式

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

圖片圖片

write behind caching模式

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

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

幾種模式對(duì)

模式

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

缺點(diǎn)

Cache Aside

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

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

Read/Write Through

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

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

Write Behind Caching

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


責(zé)任編輯:武曉燕 來源: 半畝方塘立身
相關(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ù)庫高并發(fā)

2018-07-14 21:59:57

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

2017-12-27 12:01:39

2019-01-24 09:42:55

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

2020-08-27 08:17:05

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

2017-12-12 14:51:15

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

2021-03-29 11:51:07

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

2017-02-20 07:47:04

緩存HASH高并發(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ā)框架

2015-10-08 16:40:50

緩存頭像策略

2019-10-17 16:02:44

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

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