溫馨提示×

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

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

Redis緩存穿透是什么

發(fā)布時(shí)間:2021-06-22 15:44:12 來(lái)源:億速云 閱讀:201 作者:Leah 欄目:大數(shù)據(jù)

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

一、緩存穿透(擊穿)

  原理:緩存穿透(擊穿)是指查詢(xún)一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中時(shí)被動(dòng)寫(xiě)的,并且出于容錯(cuò)考慮,如果從存儲(chǔ)層查不到數(shù)據(jù)則不寫(xiě)入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到存儲(chǔ)層去查詢(xún),失去了緩存的意義。在流量大時(shí),數(shù)據(jù)庫(kù)的壓力驟增(可能會(huì)宕機(jī))。

  解決方法:

  1. 布隆過(guò)濾器

    對(duì)所有可能查詢(xún)的參數(shù)以hash形式存儲(chǔ),在控制層先進(jìn)行校驗(yàn),不符合則丟棄。還有最常見(jiàn)的則是采用布隆過(guò)濾器,將所有可能存在的數(shù)據(jù)哈希到一個(gè)足夠大的bitmap中,一個(gè)一定不存在的數(shù)據(jù)會(huì)被這個(gè)bitmap攔截掉,從而避免了對(duì)底層存儲(chǔ)系統(tǒng)的查詢(xún)壓力。

  2. 緩存空對(duì)象

    如果一個(gè)查詢(xún)返回的數(shù)據(jù)為空(無(wú)論是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們?nèi)匀话堰@個(gè)空結(jié)果進(jìn)行緩存,但它的過(guò)期時(shí)間會(huì)很短,最長(zhǎng)不超過(guò)五分鐘。    

    第一,空值做了緩存,意味著緩存層中存了更多的鍵,需要更多的內(nèi)存空間 ( 如果是攻擊,問(wèn)題更嚴(yán)重 ),比較有效的方法是針對(duì)這類(lèi)數(shù)據(jù)設(shè)置一個(gè)較短的過(guò)期時(shí)間(最長(zhǎng)不超過(guò)五分鐘),讓其自動(dòng)剔除。

    第二,緩存層和存儲(chǔ)層的數(shù)據(jù)會(huì)有一段時(shí)間窗口的不一致,可能會(huì)對(duì)業(yè)務(wù)有一定影響。例如過(guò)期時(shí)間設(shè)置為 5分鐘,如果此時(shí)存儲(chǔ)層添加了這個(gè)數(shù)據(jù),那此段時(shí)間就會(huì)出現(xiàn)緩存層和存儲(chǔ)層數(shù)據(jù)的不一致,此時(shí)可以利用消息系統(tǒng)或者其他方式清除掉緩存層中的空對(duì)象。

二、緩存雪崩

  原理:緩存雪崩是緩存時(shí)集中在某一時(shí)段同時(shí)失效,請(qǐng)求全部轉(zhuǎn)發(fā)到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)瞬時(shí)壓力過(guò)重導(dǎo)致雪崩效應(yīng)。

  解決方法:  

  1. 加鎖排隊(duì)

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

  2. 緩存時(shí)間增加隨機(jī)值

    在原有的失效時(shí)間基礎(chǔ)上增加一個(gè)隨機(jī)值,比如1-5分鐘隨機(jī),這樣每一個(gè)緩存的過(guò)期時(shí)間的重復(fù)率就會(huì)降低,就很難引發(fā)集體失效的事件。

三、緩存預(yù)熱

  新的緩存系統(tǒng)沒(méi)有任何緩存數(shù)據(jù),在緩存重建數(shù)據(jù)的過(guò)程中,系統(tǒng)性能和數(shù)據(jù)庫(kù)負(fù)載都不太好,所以最好是在系統(tǒng)上線之前就把要緩存的熱點(diǎn)數(shù)據(jù)加載到緩存中,這種緩存預(yù)加載手段就是緩存預(yù)熱。

四、緩存熱備

  緩存熱備即當(dāng)一臺(tái)緩存服務(wù)器不可用時(shí)能實(shí)時(shí)切換到備用緩存服務(wù)器,不影響緩存使用。集群模式下,每個(gè)主節(jié)點(diǎn)都會(huì)有一個(gè)或多個(gè)從節(jié)點(diǎn)來(lái)當(dāng)備用,一旦主節(jié)點(diǎn)掛點(diǎn),從節(jié)點(diǎn)立即充當(dāng)主節(jié)點(diǎn)使用。

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

向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