1. 程式人生 > 實用技巧 >快取雪崩,快取擊穿,快取穿透

快取雪崩,快取擊穿,快取穿透

快取穿透

快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷髮起請求
如發起為id為“-1”的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。

解決方案:

介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id<=0的直接攔截;
從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。這樣可以防止攻擊使用者反覆用同一個id暴力攻擊

快取擊穿

快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),
這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大,造成過大壓力

解決方案:

設定熱點資料永遠不過期。
加互斥鎖

快取雪崩

快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。
和快取擊穿不同的是,快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。

解決方案:

快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
如果快取資料庫是分散式部署,將熱點資料均勻分佈在不同搞得快取資料庫中。
設定熱點資料永遠不過期。