redis穿透、擊穿、雪崩如何應對


緩存穿透:key對應的數據在緩存和數據源都不存在,導致每次請求都會出現沒有命中緩存,接着查詢數據源,從而有可能壓垮數據源。比如用一個不存在的用戶id獲取用戶信息,在並發情況下就可能壓垮數據庫。

解決思路:

1.用同一個不存在用戶id去查詢這種情況屬於惡意請求,可以在nginx層根據ip做攔截。

2.對用戶的請求參數加強過濾,比如id<1就return false。

3.緩存和數據都查不到時也可以給這個key設置一個null值,設置一個短一點的過期時間,比如30秒,也可以減少請求打到db上。

4.也可以結合布隆過濾器(Bloom Filter)對key做查詢,如果返回沒有 就一定沒有,如果返回有 表示有可能有。

 

緩存擊穿:某個熱點key,在並發情況下正好緩存過期,導致大量請求沒有命中緩存,接着查詢數據庫,雖然數據庫是有數據的,但是大量請求情況下也可能出現壓垮數據庫。

解決思路:

1.根據情況可以設置熱點key永不過期,配合定時任務更新cache,或者數據有更新再主動更新。

2.結合互斥鎖處理

 

緩存雪崩:同一時間緩存大面試過期,會導致數據庫在同一時間收到大量請求,可能出現壓垮數據庫。

解決思路:

1.分散過期時間,在設置緩存過期時間時加上一個隨機的數字。

2.或者設置緩存永不過期,數據有更新再主動更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM