關於快取擊穿 穿透 雪崩

2021-10-14 03:27:03 字數 1068 閱讀 1415

前台請求資料,後台先進入緩訪問資料,取到了直接返回給前台,取不到的話再進入資料庫取資料,取到了返回給前台,並且更新快取資料,取不到的話,就返回乙個空值給前台。

指的是快取和資料庫中都沒有我們需要的資料,也就是都沒有取到資料的時候,這時候我們返回乙個空值給前台,但是前台偏偏就要這個資料,就會再次傳送請求來取資料,就比如前台請求乙個id為-1的資料,這條資料本身就不可能存在,因此也不可能取到資料。

然後前台一直取,資料庫就會一直查,但是結果可想而知,並沒有這個資料,這時請求資料的使用者很有可能是一位攻擊者,

目的就是增加資料庫的負載壓力,以至於使資料庫宕機。這就叫快取穿透。

解決方法:

介面層增加資料請求校驗,比如以id為條件請求某個資料,可以新增id<=0的直接攔截。

當快取區找的資料找不到時需要進入資料庫查詢,但資料庫也不存在這個值得時候,在返回空值的同時,對請求資料的條件進行快取,例如請求資料的條件為key,但是快取和資料庫都不存在這個值,於是返回乙個null,並且將key-null鍵值對快取起來,設定快取時間為30秒,(之所以設定只為三十秒,是怕時間長了,對正常而非攻擊性的操作造成影響),這樣可以防止攻擊使用者使用同乙個條件反覆攻擊

指的是,快取中沒有,但是資料庫有的資料,(一般情況是快取中的資料到期了,此時並沒有重新存),這時由於併發使用者較多,都在獲取這個資料,但是快取中都沒有,於是都會進入資料庫獲取資料,引起資料庫壓力瞬間增大,造成過大壓力。

解決方法:

如果該資料是乙個熱點資料,可以設定該資料在快取中永不過期。

加互斥鎖。

指的是快取中大量的資料到達過期時間,而查詢量還是很大,就會一股腦的都進入資料庫取資料,以至於資料庫壓力瞬間增大,甚至宕機

與擊穿不一樣的在於,擊穿描述的是對同乙個資料的大量獲取,而雪崩講的是對大量資料同時大量獲取。

解決方法:

可以在設定快取過期時間時加乙個random隨機值,防止同一時間大量資料同時過期。

如果該資料是乙個熱點資料,可以設定該資料在快取中永不過期

如果快取資料庫採用的是分布式部署,可以將熱點資料分布在不同高的快取資料庫中。

快取雪崩 擊穿 穿透

1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...

快取雪崩 擊穿 穿透

快取擊穿 快取穿透 在同一時間快取資料集體失效,此時大量請求訪問失效資料,導致大量併發直接訪問資料庫造成資料庫壓力 將需要快取的資料進行分散失效處理,將快取的資料的失效時間設定乙個隨機值,避免大量快取資料在同一時間集體失效 將部分經常做查詢且不經常更新的資料的快取時間設定為永不失效 對於統一個key...

redis 快取擊穿 穿透 雪崩

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。如何避免?1 對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一...