天天看點

Redis雪崩,擊穿,穿透

雪崩

什麼是雪崩
當在某個時刻大面積的key失效,此時會有大量的請求打在DB上面,造成DB的CPU和記憶體負載過高,甚至當機
怎麼處理雪崩
  1. 預防雪崩
  • 對每個key的失效時間加一個随機值,保證資料庫不會在同一時間大面積失效
  • 設定熱點資料不設定過期時間,有更新操作時對緩存進行更新就好了
  1. redis當機引起的雪崩
  • 采用叢集緩存,保證緩存服務的高可用。這種方案就是在發生雪崩前對緩存叢集實作高可用,如果是使用 Redis,可以使用 主從+哨兵 ,Redis Cluster 來避免 Redis 全盤崩潰的情況
  • 開啟Redis持久化機制,盡快恢複緩存叢集。一旦重新開機,就能從磁盤上自動加載資料恢複記憶體中的資料。
  1. 防止MySQL不挂
  • ehcache本地緩存 + Hystrix限流&降級,避免MySQL被打死

擊穿

什麼的擊穿
在某時刻的某個熱點key失效,且有大量的請求對該key進行通路,導緻請求全落在DB上,造成DB的CPU和記憶體負載過高,甚至當機
怎麼處理擊穿
  1. 設定熱點資料永遠不過期
  2. 互斥鎖。第一個查詢資料的請求上使用一個 互斥鎖來鎖住它。其他的線程走到這一步拿不到鎖就等着,等第一個線程查詢到了資料,然後做緩存。後面的線程進來發現已經有緩存了,就直接走緩存。

穿透

使用者不斷請求不存在于Redis和資料庫中的資料
怎麼處理穿透
  1. 接口層增加校驗。減少不合法請求
  2. 緩存空值
  3. 布隆過濾器
  4. 對單個IP每秒通路次數超出門檻值的IP都拉黑