1. 緩存穿透
1.1 描述
用戶想要查詢某個數據,在 Redis 中查詢不到,即沒有緩存命中,這時就會直接訪問數據庫進行查詢。當請求量超出數據庫最大承載量時,就會導致數據庫崩潰。這種情況一般發生在非正常 URL 訪問,目的不是為了獲取數據,而是進行惡意攻擊。
1.2 現象
1、應用服務器壓力變大
2、Redis緩存命中率降低
3、一直查詢數據庫
1.3 原因
一個不存在緩存及查詢不到的數據,由于緩存是不命中時被動寫的,并且出于容錯考慮,如果從存儲層查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義。
1.4 解決
① 對空值緩存:如果一個查詢數據為空(不管數據是否存在),都對該空結果進行緩存,其過期時間會設置非常短。