載入布隆過濾器模組
阿新 • • 發佈:2020-09-13
在搭建redis服務的基礎上:https://www.cnblogs.com/gabin/p/13652357.html
一、從官網找到module,https://redis.io/modules
二、布隆過濾器原始碼:https://github.com/RedisBloom/RedisBloom
三、下載原始碼,並在目錄下make編譯
四、將編譯好的檔案:redisbloom.so移到自己喜歡的位置,我放到了redis的可執行目錄
五、在redis的配置檔案中增加(請注意絕對地址):
loadmodule /opt/redis/redis6/redisbloom.so
六、重啟redis服務
使用方式:
- 建立一個過濾器,並增加一個值
- 判斷這個值是否存在(請注意布隆過濾器的效果是,可以判斷一定不存在,但是不能判斷一定存在)
原理大概是:
1、通過對映演算法,算出對應6或8位
2、將對應6和8位設定到bitmap中對應的偏移位中
3、根據第二點,如果一個key算出來的位值和其他key重複,則可能出現衝突
4、由於判斷存在是根據對映演算法,去到對應的bitmap中檢視對應是否有值,只要其中一個位值為0,則一定不存在;但是所有位值為1,並不能代表一定存在
比如:
key1算出來, 100 200 300 400 500
key2算出來, 100 201 300 401 500
key3算出來, 101 200 301 400 501
那麼如果此時key1不存在,key2和key3存在;這個時候BF.EXISTS key1是存在還是不存在呢?
答案是存在:因為key2和key3的並集正好包含了key1
可是實際上key1存在嗎?
答案是:不存在!