1. 程式人生 > 其它 >Redis 常見問題-快取穿透

Redis 常見問題-快取穿透


問題描述:

* 針對 DB 中不存在的資料來源,每次請求快取和資料庫都不存在

造成後果:

* 應用伺服器壓力變大

* Redis 命中率大幅度降低

* `資料庫壓力巨增甚至 down 掉`
* 該現象對於 Redis 無影響,奔潰的是資料庫

造成原因:

* 頻繁訪問不存在資料

 

 

解決方案:

1. 空值快取:查詢資料庫返回為 null 時也進行快取,但一定設定很短的過期時間

2. 實時監控:對 Redis 命中率進行實時監控,當發現命中率極速降低時,人為排查訪問物件和訪問資料,和運維人員配合,可以設定黑名單限制服務

3. 設定訪問白名單:使用 bitmaps 型別定義一個可以訪問的名單,名單 id 作為 bitmaps 的偏移量,每次訪問和 bitmap 裡面的 id 進行比較,如果訪問 id 不在 bitmaps 裡面,進行攔截,不允許訪問。

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