特點:高效、空間占用小、允許一定誤判
布隆過濾器在 Redis 里的實現機制,核心就是:
-
用一個大位圖(bitmap)來表示集合
位圖長度 = m
初始值都是 0
插入元素時 -
通過 k 個不同的哈希函數,對元素做哈希
每個哈希結果 % m 得到一個索引位置
用 SETBIT bitmap index 1 把這些位置標記為 1 -
查詢元素時
同樣計算 k 個哈希位置
用 GETBIT bitmap index 檢查這些位置是否都是 1
如果有任何一個位置是 0 → 一定不存在
如果全部是 1 → 可能存在(有誤判風險)
🌍 常見使用場景
-
網頁爬蟲的 URL 去重
爬蟲在抓取網頁時,需要判斷某個 URL 是否已經訪問過。
如果用哈希表存儲所有 URL,內存消耗會非常大。
使用布隆過濾器可以快速判斷 URL 是否可能訪問過,大幅減少存儲開銷。 -
緩存穿透問題
在緩存(如 Redis)+ 數據庫架構中,如果用戶頻繁請求數據庫中不存在的 key,會導致請求直接打到數據庫(緩存穿透)。
解決方案:在緩存前加一層布隆過濾器,快速判斷 key 是否可能存在,不存在則直接攔截。 -
黑名單/白名單過濾
比如:垃圾郵件系統、惡意 IP 攔截、用戶黑名單等。
不需要存儲所有黑名單,只需用布隆過濾器判斷某個 IP/郵箱是否可能在名單中。 -
數據庫或存儲系統加速
HBase、LevelDB、RocksDB 都在內部使用布隆過濾器。
用于快速判斷某個 key 是否在某個文件或存儲塊中,避免不必要的磁盤 IO。 -
推薦系統/廣告系統去重
例如:廣告推薦時,需要判斷某個用戶是否已經看過某條廣告。
使用布隆過濾器可以快速判斷,避免重復推薦。