redis 快取穿透 擊穿 雪崩

2022-06-07 12:45:13 字數 844 閱讀 4451

大量查詢 redis 中不存在的key(用隨救數進行查詢),導致每次都會去查詢資料庫,造成資料庫壓力過大(甚至宕機)。

解決辦法:

1.對我們的 api 介面 進行限流處理、使用者授權、黑名單和白名單進行攔截。

2.將不存在的 key 存到 redis 中並設定有效期,有效減輕短時間內重複 key 的查詢。不推薦使用(一般隨機數都是不相等的)。

3.布隆過濾器

介紹:它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都比一般的演算法要好的多,缺點是有一定的誤識別率和刪除困難。

在高併發的情況下,當乙個快取 key 過期時,因為訪問該 key 請求較大,多個請求同時發現快取過期,因此對多個請求同時資料庫查詢、同時向redis寫入快取資料,這樣會導致資料庫的壓力非常大;

1.使用分布式鎖

保證在分布式情況下,使用分布式鎖保證對於每個key同時只允許只有乙個執行緒查詢到後端服務,其他沒有獲取到鎖的許可權,只需要等待即可;這種高併發壓力直接轉移到分布式鎖上,對分布式鎖的壓力非常大。

2.使用本地鎖

使用本地鎖與分布式鎖機制一樣,只不過分布式鎖適應於服務集群、本地鎖僅限於單個服務使用。

3.軟過過期

設定熱點資料永不過期或者非同步延長過期時間;

4.布隆過濾器

快取雪崩指快取伺服器重啟或者大量的快取集中在某個時間段失效,突然給資料庫產生了巨大的壓力,甚至擊垮資料庫的情況。

解決思路:對不用的資料使用不同的失效時間,加上隨機數。

穿透:查詢 key 不存在的情況

擊穿:併發查詢同乙個 key 不存在的情況

雪崩:查詢多個 key 不存在的情況

Redis快取穿透,穿透擊穿,快取雪崩

乙個一定不存在快取及查詢不到的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bit...

redis 快取穿透 擊穿 雪崩

介面層增加校驗,如使用者鑑權校驗,id做基礎校驗,id 0的直接攔截 從快取取不到的資料,在資料庫中也沒有取到,這時也可以將key value對寫為key null,快取有效時間可以設定短點,如30秒 設定太長會導致正常情況也沒法使用 這樣可以防止攻擊使用者反覆用同乙個id暴力攻擊 public o...

redis快取穿透,擊穿,雪崩

快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,多來自於黑客攻擊。由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,要是有人利用不存在的k...