快取穿透 快取擊穿 快取雪崩的區別

2022-09-05 09:36:09 字數 1291 閱讀 2891

一、快取穿透:(即:快取無資料,資料庫也無資料)

如黑客惡意攻擊,使用快取和資料庫均沒有的key進行不斷請求,導致資料庫壓力過大。

解決方法:

1、對使用者進行鑑權、對請求引數進行校驗,不合理直接過濾。

2、對查詢不到的資料也放到快取,value為空,設定一定的過期時間。(不太常用,因為如果是隨機key就不起作用,且佔快取)

3、使用布隆過濾器,快速判斷key是否在資料庫中存在,不存在直接返回。(最有效)

第1種是最常用的策略,第2種不太常用,因為如果是隨機key就不起作用,且佔快取,第三種最簡單有效。實際使用中,可以1、3相結合。

二、快取擊穿:(即:快取無資料,資料庫有資料,key比較集中)

如高併發的情況下,熱點資料快取過期,這時候會導致大量請求讀不到快取同時讀資料庫,導致資料庫負載過大。

解決方法:

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

2、熱點資料快過期時,通過另乙個非同步執行緒重新設定key。

3、當從快取資料過期,重新從資料庫載入資料到快取的過程上互斥鎖。

第1種的話,資料量大時,快取量會比較大,第2種,很好理解,但是需要另外的邏輯去維護,會增加系統的複雜度。第3種,是比較常用的方式。

載入快取時上互斥鎖:

1

public string get(string key) throws

exception else16}

17return

value;

18 }

三、快取雪崩:(即:快取無資料,資料庫有資料,key比較分散)

如在高併發的情況下,快取同一時刻失效(如快取掛了,或者設定了相同過期時間),所有請求會讀資料庫,容易導致資料庫負載瞬間上公升,乃至崩掉。如果重啟資料庫,立馬又會被新的請求壓崩。

解決方法:

1、快取的失效時間設定為隨機值,避免同時失效。

2、redis搭建高可用,主從+哨兵,redis cluster。

3、服務限流、降級,避免資料庫被瞬間壓崩。

第1種只能防止因快取同時過期導致的快取失效,第2種可以有效避免單台快取掛掉的情況。第3種是通過提高服務的高可用,來避免快取失效帶來的影響,是輔助措施。

快取擊穿和快取雪崩區別:

兩者有點像,主要區別在於快取擊穿是查詢同一條資料或熱點資料查詢不到,穿過了快取。快取雪崩是指大量資料查詢不到,穿過了快取。

快取擊穿 快取穿透 快取雪崩區別

快取穿透 產生原因 當前端傳送一條請求 這條請求快取和資料庫都沒有 到後台,會先到快取裡找,沒有再到資料庫去找,也沒有,如果有人惡意攻擊會造成資料庫蹦了,這就是穿透 解決方法 不管前面發的請求後台有沒有資料,都給乙個相應的值,比如乙個 空字串,在存到redies中,這樣下次再來查就不會再到資料庫中去...

快取穿透 快取擊穿 快取雪崩的區別

一 快取穿透 即 快取無資料,資料庫也無資料 如黑客惡意攻擊,使用快取和資料庫均沒有的key進行不斷請求,導致資料庫壓力過大。解決方法 1 對使用者進行鑑權 對請求引數進行校驗,不合理直接過濾。2 對查詢不到的資料也放到快取,value為空,設定一定的過期時間。不太常用,因為如果是隨機key就不起作...

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

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