問題描述:
* 針對 db 中不存在的資料來源,每次請求快取和資料庫都不存在
造成後果:
* 應用伺服器壓力變大
* redis 命中率大幅度降低
* `資料庫壓力鉅增甚至 down 掉`
* 該現象對於 redis 無影響,奔潰的是資料庫
造成原因:
* 頻繁訪問不存在資料
解決方案:
1. 空值快取:查詢資料庫返回為 null 時也進行快取,但一定設定很短的過期時間
2. 實時監控:對 redis 命中率進行實時監控,當發現命中率極速降低時,人為排查訪問物件和訪問資料,和運維人員配合,可以設定黑名單限**務
3. 設定訪問白名單:使用 bitmaps 型別定義乙個可以訪問的名單,名單 id 作為 bitmaps 的偏移量,每次訪問和 bitmap 裡面的 id 進行比較,如果訪問 id 不在 bitmaps 裡面,進行攔截,不允許訪問。
4. 布隆過濾器:它實際上是乙個很長的二進位制向量 (位圖) 和一系列隨機對映函式(雜湊函式)。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。
Redis快取常見問題
這是決定在使用快取時就該考慮的問題。快取的資料在資料來源發生變更時需要對快取進行更新,資料來源可能是 db,也可能是遠端服務。更新的方式可以是主動更新。資料來源是 db 時,可以在更新完 db 後就直接更新快取。當資料來源不是 db 而是其他遠端服務,可能無法及時主動感知資料變更,這種情況下一般會選...
Redis 之 快取常見問題
使用者查詢乙個資料,快取中沒有,資料庫中也沒有。這樣頻繁的訪問資料庫導致資料庫宕機。解決方法 1.請求加乙個過濾器 布隆過濾器 對所有可能的查詢的引數以hash形式儲存,在控制層先進行校驗,不符合則丟棄。這樣避免資料庫壓力。布隆過濾器 2.快取空物件 查詢為空則在快取中儲存乙個空物件。乙個key訪問...
快取常見問題
情況 在流量大時,如果有人利用不存在的key頻繁去訪問我們的應用,可能會導致資料庫掛掉。原因 查詢乙個不存在的資料,由於快取是不命中時被動寫入,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。解決方案 1 布隆過濾器 將所有可...