一、快取處理流程
前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。
二、快取穿透
描述:
快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為「-1」的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。
解決方案:
介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id<=0的直接攔截;
從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key-value對寫為key-null,快取有效時間可以設定短點,如30秒(設定太長會導致正常情況也沒法使用)。這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊
三、快取擊穿
描述:
快取擊穿是指快取中沒有但資料庫中有的資料(一般是快取時間到期),這時由於併發使用者特別多,同時讀快取沒讀到資料,又同時去資料庫去取資料,引起資料庫壓力瞬間增大,造成過大壓力
解決方案:
設定熱點資料永遠不過期。
說明:1)快取中有資料,直接走上述**13行後就返回結果了
2)快取中沒有資料,第1個進入的執行緒,獲取鎖並從資料庫去取資料,沒釋放鎖之前,其他並行進入的執行緒會等待100ms,再重新去緩訪問資料。這樣就防止都去資料庫重複取資料,重複往快取中更新資料情況出現。
3)當然這是簡化處理,理論上如果能根據key值加鎖就更好了,就是執行緒a從資料庫取key1的資料並不妨礙執行緒b取key2的資料,上面**明顯做不到這點。
四、快取雪崩
描述:
快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。和快取擊穿不同的是, 快取擊穿指併發查同一條資料,快取雪崩是不同資料都過期了,很多資料都查不到從而查資料庫。
解決方案:
快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。
如果快取資料庫是分布式部署,將熱點資料均勻分布在不同搞得快取資料庫中。
設定熱點資料永遠不過期。
一、快取處理流程
快取擊穿 快取穿透 快取雪崩區別
快取穿透 產生原因 當前端傳送一條請求 這條請求快取和資料庫都沒有 到後台,會先到快取裡找,沒有再到資料庫去找,也沒有,如果有人惡意攻擊會造成資料庫蹦了,這就是穿透 解決方法 不管前面發的請求後台有沒有資料,都給乙個相應的值,比如乙個 空字串,在存到redies中,這樣下次再來查就不會再到資料庫中去...
快取穿透 快取擊穿 快取雪崩的區別
一 快取穿透 即 快取無資料,資料庫也無資料 如黑客惡意攻擊,使用快取和資料庫均沒有的key進行不斷請求,導致資料庫壓力過大。解決方法 1 對使用者進行鑑權 對請求引數進行校驗,不合理直接過濾。2 對查詢不到的資料也放到快取,value為空,設定一定的過期時間。不太常用,因為如果是隨機key就不起作...
快取穿透 快取擊穿 快取雪崩的區別
一 快取穿透 即 快取無資料,資料庫也無資料 如黑客惡意攻擊,使用快取和資料庫均沒有的key進行不斷請求,導致資料庫壓力過大。解決方法 1 對使用者進行鑑權 對請求引數進行校驗,不合理直接過濾。2 對查詢不到的資料也放到快取,value為空,設定一定的過期時間。不太常用,因為如果是隨機key就不起作...