快取穿透,擊穿,雪崩

2022-08-12 11:18:10 字數 1179 閱讀 6701

一、快取處理流程

前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。

二、快取穿透

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

解決方案:

介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id<=0的直接攔截;

從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊

三、快取擊穿

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

解決方案:

設定熱點資料永遠不過期。

加互斥鎖,互斥鎖參考**如下:

說明:1)快取中有資料,直接走上述**13行後就返回結果了

2)快取中沒有資料,第1個進入的執行緒,獲取鎖並從資料庫去取資料,沒釋放鎖之前,其他並行進入的執行緒會等待100ms,再重新去緩訪問資料。這樣就防止都去資料庫重複取資料,重複往快取中更新資料情況出現。

3)當然這是簡化處理,理論上如果能根據key值加鎖就更好了,就是執行緒a從資料庫取key1的資料並不妨礙執行緒b取key2的資料,上面**明顯做不到這點。

四、快取雪崩

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

解決方案:

快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。

如果快取資料庫是分布式部署,將熱點資料均勻分布在不同搞得快取資料庫中。

設定熱點資料永遠不過期。

快取穿透,擊穿,雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...

快取穿透,擊穿,雪崩

快取穿透 在高併發下,查詢乙個不存在的值時,快取不會被命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢乙個不存在的活動。快取擊穿 在高併發下,對乙個特定的值進行查詢,但是這個時候快取正好過期了,快取沒有命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢活動資訊,但是在活動進行過程中活動快取...

快取穿透 擊穿 雪崩

快取和資料庫中都沒有資料,而使用者不斷發起請求。如請求id為 1的資料。介面增加校驗,如使用者鑑權,id做基礎校驗 對key null做短時間快取 快取中沒有但資料庫中有的資料 一般是快取時間到期 這時併發量大,同時快取讀資料沒有,又同時去資料庫取資料,引起資料庫壓力瞬間增大。讀取資料庫資料,加互斥...