Redis雪崩,擊穿,穿透
阿新 • • 發佈:2021-07-16
雪崩
什麼是雪崩
當在某個時刻大面積的key失效,此時會有大量的請求打在DB上面,造成DB的CPU和記憶體負載過高,甚至宕機
怎麼處理雪崩
- 預防雪崩
- 對每個key的失效時間加一個隨機值,保證資料庫不會在同一時間大面積失效
- 設定熱點資料不設定過期時間,有更新操作時對快取進行更新就好了
- redis宕機引起的雪崩
- 採用叢集快取,保證快取服務的高可用。這種方案就是在發生雪崩前對快取叢集實現高可用,如果是使用 Redis,可以使用 主從+哨兵 ,Redis Cluster 來避免 Redis 全盤崩潰的情況
- 開啟Redis持久化機制,儘快恢復快取叢集。一旦重啟,就能從磁碟上自動載入資料恢復記憶體中的資料。
- 防止MySQL不掛
- ehcache本地快取 + Hystrix限流&降級,避免MySQL被打死
擊穿
什麼的擊穿
在某時刻的某個熱點key失效,且有大量的請求對該key進行訪問,導致請求全落在DB上,造成DB的CPU和記憶體負載過高,甚至宕機
怎麼處理擊穿
- 設定熱點資料永遠不過期
- 互斥鎖。第一個查詢資料的請求上使用一個 互斥鎖來鎖住它。其他的執行緒走到這一步拿不到鎖就等著,等第一個執行緒查詢到了資料,然後做快取。後面的執行緒進來發現已經有快取了,就直接走快取。
穿透
使用者不斷請求不存在於Redis和資料庫中的資料
怎麼處理穿透
- 介面層增加校驗。減少不合法請求
- 快取空值
- 布隆過濾器
- 對單個IP每秒訪問次數超出閾值的IP都拉黑