Redis快取擊穿 穿透 雪崩的原因及解決方案

2021-10-23 10:29:15 字數 1106 閱讀 5920

一、快取擊穿

快取中沒有資料,資料庫有資料,高併發同時衝向資料庫,db壓力增大

在redis獲取某一key時, 由於key不存在, 而必須向db發起一次請求的行為, 稱為「redis擊穿」。

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

引發擊穿的原因:

第一次訪問

惡意訪問不存在的key

key過期

合理的規避方案:

伺服器啟動時, 提前寫入

規範key的命名, 通過中介軟體攔截

加互斥鎖

對某些高頻訪問的key,設定合理的ttl或永不過期

二、快取穿透

快取中沒有資料,資料庫也沒有資料,惡意攻擊壓垮資料庫

key對應的資料在資料來源並不存在,每次針對此key的請求從快取獲取不到,請求都會到資料來源,從而可能壓垮資料來源。比如用乙個不存在的使用者id獲取使用者資訊,不論快取還是資料庫都沒有,若黑客利用此漏洞進行攻擊可能壓垮資料庫。

合理的規避方案:

布隆過濾器:將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被 這個bitmap攔截掉,從而避免了對底層儲存系統的查詢壓力

快取空物件:當儲存層不命中後,即使返回的空物件也將其快取起來,同時會設定乙個過期時間,之後再訪問這個資料將會從快取中獲取,保護了後端資料來源

三、快取雪崩

快取中大量資料集中過期,高併發請求衝向資料庫,使資料庫宕機

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

合理的規避方案:

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

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

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

redis 快取擊穿 穿透 雪崩

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

Redis快取雪崩 擊穿 穿透

目錄 三 快取擊穿 四 快取穿透 這三個問題一旦發生,就會導致大量請求進入後台的資料庫,如果有大量併發同時到達資料庫,有可能會導致資料庫宕機,影響業務,也有可能會導致一系列連鎖反映,很可能導致業務長時間無法恢復。接下來本文詳細介紹這三個問題的發生場景以及對應的解決方案。雪崩是指大量請求無法在redi...

快取雪崩 擊穿 穿透

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