緩存擊穿
原因
指某些熱點key到達了過期的那個時間點,這個時候剛好有大量的并發請求需要查詢這個key,進而導緻并發請求直接打到了資料庫,這就是緩存擊穿。
解決方案
- 提前将熱門資料放入redis緩存
- 對熱門key進行監控,定期進行續期
- 對不同級别的key設定不同的緩存時間
- 設定分布式鎖
緩存穿透
原因
這個是惡意攻擊導緻的,黑客通過僞造非法的id,查詢資料庫中不存在的key,導緻經過redis緩存時:判斷key不存在,則直接查DB,最終導緻所有請求全部達到了DB中,造成緩存穿透
解決方案
- 緩存一個特定的值,代表資料庫中不存在,如 空值
- 使用Redis布隆過濾器:如果不存在那就一定不存在,如果存在但是不一定存在
- 設定有規律的id,如果不滿足規則條件則攔截
緩存雪崩
原因1:
解決方案1
- 緩存時間最好不要設定一樣,可以上下波動一個門檻值
- 服務降級
原因2
解決方案2
- 限流
- 熔斷
- 建立高可用緩存叢集