Redis 緩存穿透、緩存雪崩、緩存擊穿的區別和解決方案

在這裏插入圖片描述

  1. 緩存穿透
      訪問一個不存在的key,緩存不起作用,請求會穿透到DB,流量大時DB會掛掉。
    解決方案:
    (1)攔截器,id<=0的直接攔截。
    (2)從cache和db都取不到,可以將key-value寫爲key-null,設置較短過期時間,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反覆用同一個id暴力攻擊。

  2. 緩存擊穿
      一個存在的key,在緩存過期的一刻,同時有大量的請求,這些請求都會擊穿到DB,造成瞬時DB請求量大、壓力驟增。
    解決方案:
    (1)設置熱點數據永遠不過期。
    (2)加互斥鎖。

  3. 緩存雪崩
    大量的key設置了相同的過期時間,導致在緩存在同一時刻全部失效,造成瞬時DB請求量大、壓力驟增,引起雪崩。
    解決方案:
    (1)緩存數據的過期時間設置隨機,防止同一時間大量數據過期現象發生。
    (2)如果緩存數據庫是分佈式部署,將熱點數據均勻分佈在不同的緩存數據庫中。
    (3)設置熱點數據永遠不過期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章