天天看點

Redis 搞懂緩存擊穿、緩存穿透、緩存雪崩 産生原因及産線常用的解決方案

Redis 搞懂緩存擊穿、緩存穿透、緩存雪崩 産生原因及産線常用的解決方案

緩存擊穿

原因

指某些熱點key到達了過期的那個時間點,這個時候剛好有大量的并發請求需要查詢這個key,進而導緻并發請求直接打到了資料庫,這就是緩存擊穿。

解決方案

  • 提前将熱門資料放入redis緩存
  • 對熱門key進行監控,定期進行續期
  • 對不同級别的key設定不同的緩存時間
  • 設定分布式鎖
Redis 搞懂緩存擊穿、緩存穿透、緩存雪崩 産生原因及産線常用的解決方案

緩存穿透

原因

這個是惡意攻擊導緻的,黑客通過僞造非法的id,查詢資料庫中不存在的key,導緻經過redis緩存時:判斷key不存在,則直接查DB,最終導緻所有請求全部達到了DB中,造成緩存穿透

解決方案

  • 緩存一個特定的值,代表資料庫中不存在,如 空值
  • 使用Redis布隆過濾器:如果不存在那就一定不存在,如果存在但是不一定存在
  • 設定有規律的id,如果不滿足規則條件則攔截
Redis 搞懂緩存擊穿、緩存穿透、緩存雪崩 産生原因及産線常用的解決方案

緩存雪崩

原因1:

解決方案1

  • 緩存時間最好不要設定一樣,可以上下波動一個門檻值
  • 服務降級

原因2

解決方案2

  • 限流
  • 熔斷
  • 建立高可用緩存叢集