色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁(yè) > 博客 > Redis緩存異常及解決方案

          Redis緩存異常及解決方案

          發(fā)布人:天翼云開(kāi)發(fā)者 時(shí)間:2024-08-19 來(lái)源:工程師 發(fā)布文章

          本文分享自天翼云開(kāi)發(fā)者社區(qū)《Redis緩存異常及解決方案》,作者:l****n

          本文向讀者解釋了Redis使用過(guò)程中,數(shù)據(jù)不一致、緩存雪崩、緩存擊穿和緩存穿透等問(wèn)題的定義,并給出對(duì)應(yīng)的解決方案。

          1、數(shù)據(jù)不一致 

          一致指的是

          緩存中有數(shù)據(jù),那么,緩存的數(shù)據(jù)值需要和數(shù)據(jù)庫(kù)中的值相同;

          緩存中本身沒(méi)有數(shù)據(jù),那么,數(shù)據(jù)庫(kù)中的值必須是最新值。

          不一致如何發(fā)生

          對(duì)于讀寫(xiě)緩存來(lái)說(shuō),寫(xiě)緩存時(shí)同步寫(xiě)數(shù)據(jù)庫(kù),需要使用事務(wù)保證緩存和數(shù)據(jù)庫(kù)的更新具有原子性。弱一致性情況下,可以使用異步寫(xiě)回。

          對(duì)于只讀緩存,刪改數(shù)據(jù)需要既更新數(shù)據(jù)庫(kù),又刪除緩存。如果不使用事務(wù),就會(huì)出現(xiàn)數(shù)據(jù)不一致。

          比如先更新數(shù)據(jù)庫(kù),再刪除緩存。更新成功,刪除緩存失敗,則緩存中為舊值。如果先刪除緩存再更新數(shù)據(jù)庫(kù),則緩存刪除成功,數(shù)據(jù)庫(kù)更新失敗,再訪問(wèn)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)還是舊值。

          解決方案

          需要重試機(jī)制,當(dāng)兩個(gè)操作任意一個(gè)失敗時(shí),重新執(zhí)行。

          特別的,當(dāng)數(shù)據(jù)庫(kù)更新成功,緩存刪除也成功時(shí),其實(shí)也有可能不一致。比如刪除了緩存,還未更新數(shù)據(jù)庫(kù)。線程B此時(shí)讀取數(shù)據(jù)庫(kù)中舊值并寫(xiě)到緩存。

          解決方法:延遲雙刪。sleep是為了等B線程執(zhí)行完寫(xiě)緩存操作。sleep時(shí)間根據(jù)讀數(shù)據(jù)和寫(xiě)緩存時(shí)間來(lái)估算。

            redis.delKey(X)

            db.update(X)

            Thread.sleep(N)

            redis.delKey(X)

          比如更新了數(shù)據(jù)庫(kù),還未刪除緩存時(shí)。B線程就開(kāi)始讀數(shù)據(jù),從緩存讀到舊值。不過(guò)這種情況下緩存會(huì)馬上被刪除,所以影響較小。


          2、緩存雪崩

          大量請(qǐng)求無(wú)法在redis得到處理,從而打到數(shù)據(jù)庫(kù)。主要原因:

          緩存中大量數(shù)據(jù)同時(shí)過(guò)期,應(yīng)用訪問(wèn)時(shí)無(wú)法命中緩存,從而都請(qǐng)求到數(shù)據(jù)庫(kù);

          redis宕機(jī)。

          解決方案

          過(guò)期時(shí)間增加隨機(jī)數(shù);

          發(fā)生雪崩時(shí)進(jìn)行服務(wù)降級(jí)。非核心數(shù)據(jù)直接返回默認(rèn)值或錯(cuò)誤;

          限流熔斷,當(dāng)數(shù)據(jù)庫(kù)負(fù)載突升時(shí),暫停業(yè)務(wù)應(yīng)用對(duì)緩存的訪問(wèn)。


          3、緩存擊穿

          熱點(diǎn)數(shù)據(jù)過(guò)期失效,大量請(qǐng)求突然打到數(shù)據(jù)庫(kù)。

          解決方法

          熱點(diǎn)數(shù)據(jù)不設(shè)置過(guò)期時(shí)間。


          4、緩存穿透

          數(shù)據(jù)不在緩存中,也不在數(shù)據(jù)庫(kù)中??赡茉颍?/span>

          業(yè)務(wù)層誤操作,刪除了數(shù)據(jù)庫(kù)數(shù)據(jù)。

          惡意攻擊。

          解決方案

          緩存默認(rèn)值;

          使用布隆過(guò)濾器快速判斷數(shù)據(jù)是否存在;

          前端進(jìn)行請(qǐng)求檢查。


          在實(shí)際的業(yè)務(wù)中,以上異常場(chǎng)景可能會(huì)同時(shí)出現(xiàn),排查時(shí)要根據(jù)自己的情況進(jìn)行針對(duì)性分析。

          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: Redis 緩存

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉