redis 使用 布隆過濾器

2021-10-24 12:02:12 字數 876 閱讀 2170

我們知道有 hyperloglog 可以用來做基數統計,但它沒提供判斷乙個值是否存在的查詢方法,那我們如何才能查詢乙個值是否存在於海量資料之中呢?

如果使用傳統的方式,例如 sql 中的傳統查詢,因為資料量太多,查詢效率又低有占用系統的資源,因此我們需要乙個優秀的演算法和功能來實現這個需求,這是我們今天要講的——布隆過濾器。

開啟布隆過濾器 在 redis 中不能直接使用布隆過濾器,但我們可以通過 redis 4.0 版本之後提供的 modules(擴充套件模組)的方式引入,本文提供兩種方式的開啟方式。

make # 編譯redisbloom

編譯正常執行完,會在根目錄生成乙個 redisbloom.so 檔案。

>

./src/redis-server redis.conf -

-loadmodule .

/src/modules/redisbloom-master/redisbloom.so

其中 --loadmodule 為載入擴充套件模組的意思,後面跟的是 redisbloom.so 檔案的目錄。

啟動驗證

服務啟動之後,我們需要判斷布隆過濾器是否正常開啟,此時我們只需使用 redis-cli 連線到服務端,輸入 bf.add 看有沒有命令提示,就可以判斷是否正常啟動了,如下圖所示:

如果有命令提示則表名 redis 伺服器已經開啟了布隆過濾器。

布隆過濾器的使用 布隆過濾器的命令不是很多,主要包含以下幾個:

Redis 布隆過濾器

實現原理 對的資料肯定是對的,錯的資料不能保證是對的。解釋如下 之前新增到容器中的資料,再次進行判斷是不是在這裡面,因為來過,槽位肯定我為1,所以判斷是不會出現問題的。容器中不存在,判斷是不是在容器中,可能其他的資料通過hash函式執行後把槽位占用了,所以存在一定的誤差。不能保證一定沒問題。hash...

Redis 布隆過濾器

想知道某乙個值是不是已經在 hyperloglog 結構裡面了,它就無能為力了,它只提供了 pfadd 和 pfcount 方法,沒有提供 pfcontains 這種方法。講個使用場景,比如我們在使用新聞客戶端看新聞時,它會給我們不停地推薦新的內容,它每次推薦時要去重,去掉那些已經看過的內容。問題來...

redis 布隆過濾器

為了應對redis快取穿透有三個大致方案 做好引數校驗,快取無效key,以及布隆過濾器。通過布隆過濾器我們可以非常方便地判斷乙個給定資料是否存在於海量資料中。我們需要的就是判斷 key 是否合法 具體是這樣做的 把所有可能存在的請求的值都存放在布隆過濾器中,當使用者請求過來,先判斷使用者發來的請求的...