緩存雪崩:redis中的很多key過期時間相同,過期時間到了之後,大量數據訪問redis,然後redis訪問數據庫,redis受不了了,相當於緩存被擊穿了
解決方案:
1、不要把大量的數據的超時時間設爲同一個時間點,加個隨機值
2、熱點數據永遠不過期
3、緩存數據庫分佈式部署
緩存擊穿:一個key在失效的時刻,大量請求這個key,直接訪問到數據中
解決方案:
1、熱點數據永遠不過期
2、加互斥鎖
緩存穿透:大量獲取緩存中不存在key的value,導致大量數據直接訪問數據庫
解決方案:
1、採用布隆過濾器,使用一個足夠大的bitmap,用於存儲可能訪問的key,不存在的key直接被過濾;
2、攔截器,id<=0的直接攔截。
3、從cache和db都取不到,可以將key-value寫爲key-null,設置較短過期時間,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反覆用同一個id暴力攻擊。