1. 程式人生 > 其它 >Redis雪崩,擊穿,穿透

Redis雪崩,擊穿,穿透

雪崩

什麼是雪崩

當在某個時刻大面積的key失效,此時會有大量的請求打在DB上面,造成DB的CPU和記憶體負載過高,甚至宕機

怎麼處理雪崩
  1. 預防雪崩
    • 對每個key的失效時間加一個隨機值,保證資料庫不會在同一時間大面積失效
    • 設定熱點資料不設定過期時間,有更新操作時對快取進行更新就好了
  2. redis宕機引起的雪崩
    • 採用叢集快取,保證快取服務的高可用。這種方案就是在發生雪崩前對快取叢集實現高可用,如果是使用 Redis,可以使用 主從+哨兵 ,Redis Cluster 來避免 Redis 全盤崩潰的情況
    • 開啟Redis持久化機制,儘快恢復快取叢集。一旦重啟,就能從磁碟上自動載入資料恢復記憶體中的資料。
  3. 防止MySQL不掛
    • ehcache本地快取 + Hystrix限流&降級,避免MySQL被打死

擊穿

什麼的擊穿

在某時刻的某個熱點key失效,且有大量的請求對該key進行訪問,導致請求全落在DB上,造成DB的CPU和記憶體負載過高,甚至宕機

怎麼處理擊穿
  1. 設定熱點資料永遠不過期
  2. 互斥鎖。第一個查詢資料的請求上使用一個 互斥鎖來鎖住它。其他的執行緒走到這一步拿不到鎖就等著,等第一個執行緒查詢到了資料,然後做快取。後面的執行緒進來發現已經有快取了,就直接走快取。

穿透

使用者不斷請求不存在於Redis和資料庫中的資料

怎麼處理穿透
  1. 介面層增加校驗。減少不合法請求
  2. 快取空值
  3. 布隆過濾器
  4. 對單個IP每秒訪問次數超出閾值的IP都拉黑