溫馨提示×

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

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

redis緩存雪崩和緩存穿透的解決方法

發(fā)布時(shí)間:2020-06-23 20:12:15 來源:億速云 閱讀:163 作者:元一 欄目:關(guān)系型數(shù)據(jù)庫(kù)

redis緩存雪崩和緩存穿透的怎么解決?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

緩存穿透

緩存穿透是指查詢一個(gè)一定不存在的數(shù)據(jù)。由于緩存不命中,并且出于容錯(cuò)考慮,如果從數(shù)據(jù)庫(kù)查不到數(shù)據(jù)則不寫入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到數(shù)據(jù)庫(kù)去查詢,失去了緩存的意義。即請(qǐng)求的數(shù)據(jù)在緩存大量不命中,導(dǎo)致請(qǐng)求走數(shù)據(jù)庫(kù)。

redis緩存雪崩和緩存穿透的解決方法

解決方案

布隆過濾

對(duì)所有可能查詢的參數(shù)以hash形式存儲(chǔ),在控制層先進(jìn)行校驗(yàn),不符合則丟棄,從而避免了對(duì)底層存儲(chǔ)系統(tǒng)的查詢壓力;

緩存空對(duì)象

當(dāng)存儲(chǔ)層不命中后,即使返回的空對(duì)象也將其緩存起來,同時(shí)會(huì)設(shè)置一個(gè)過期時(shí)間,之后再訪問這個(gè)數(shù)據(jù)將會(huì)從緩存中獲取,保護(hù)了后端數(shù)據(jù)源;

但是這種方法會(huì)存在兩個(gè)問題:

如果空值能夠被緩存起來,這就意味著緩存需要更多的空間存儲(chǔ)更多的鍵,因?yàn)檫@當(dāng)中可能會(huì)有很多的空值的鍵;

即使對(duì)空值設(shè)置了過期時(shí)間,還是會(huì)存在緩存層和存儲(chǔ)層的數(shù)據(jù)會(huì)有一段時(shí)間窗口的不一致,這對(duì)于需要保持一致性的業(yè)務(wù)會(huì)有影響。

緩存雪崩

我們都知道Redis不可能把所有的數(shù)據(jù)都緩存起來(內(nèi)存昂貴且有限),所以Redis需要對(duì)數(shù)據(jù)設(shè)置過期時(shí)間,將已經(jīng)過期的鍵值對(duì)刪除,它采用的是惰性刪除+定期刪除兩種策略對(duì)過期鍵刪除。

如果緩存數(shù)據(jù)設(shè)置的過期時(shí)間是相同的,并且Redis恰好將這部分?jǐn)?shù)據(jù)全部刪光了。這就會(huì)導(dǎo)致在這段時(shí)間內(nèi),這些緩存同時(shí)失效,全部請(qǐng)求到數(shù)據(jù)庫(kù)中。

Redis掛掉了,請(qǐng)求全部走數(shù)據(jù)庫(kù)。
對(duì)緩存數(shù)據(jù)設(shè)置相同的過期時(shí)間,導(dǎo)致某段時(shí)間內(nèi)緩存失效,請(qǐng)求全部走數(shù)據(jù)庫(kù)。

redis緩存雪崩和緩存穿透的解決方法

解決方案

保證緩存層服務(wù)高可用性

即使個(gè)別節(jié)點(diǎn)、個(gè)別機(jī)器、甚至是機(jī)房宕掉,依然可以提供服務(wù),比如 Redis Sentinel 和 Redis Cluster 都實(shí)現(xiàn)了高可用。

依賴隔離組件為后端限流并降級(jí)

在緩存失效后,通過加鎖或者隊(duì)列來控制讀數(shù)據(jù)庫(kù)寫緩存的線程數(shù)量。比如對(duì)某個(gè)key只允許一個(gè)線程查詢數(shù)據(jù)和寫緩存,其他線程等待。

數(shù)據(jù)預(yù)熱

可以通過緩存reload機(jī)制,預(yù)先去更新緩存,再即將發(fā)生大并發(fā)訪問前手動(dòng)觸發(fā)加載緩存不同的key,設(shè)置不同的過期時(shí)間,讓緩存失效的時(shí)間點(diǎn)盡量均勻。

看完上述內(nèi)容,你們掌握redis緩存雪崩和緩存穿透的解決方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(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