ubuntu16.04安装,使用redis布隆过滤器示例
簡言
1. 環境:ubuntu16.04,redis版本:5.0.7,布隆過濾器實現版本:RedisBloom1.1.1
2. 默認情況,下載安裝redis時是不帶布隆過濾器功能的,它是以插件的形式提供服務,需要手動加載(修改配置文件后重啟redis或者用命令module load來動態加載)
3. RedisBloom的官方地址:https://github.com/RedisBloom/RedisBloom
4. 預設布隆過濾器的空間時,如果不知道誤判率,容量,實際占用空間,哈希函數個數設置多少合適,可以在這個網站計算?https://hur.st/bloomfilter/?n=10000&p=0.001&m=&k=
下載安裝
1. 運行命令?wget https://github.com/RedisLabsModules/rebloom/archive/v1.1.1.tar.gz,我們這里下載的是1.1.1版本,還有其他版本供選擇
2. 運行命令?tar -zxvf v1.1.1.tar.gz 解壓,解壓后的文件夾如下
3. 進入目錄?RedisBloom-1.1.1后,運行命令 make 即可編譯出so文件,如下
4. 打開我們redis-server用的配置文件redis.conf,在MODULES模塊下添加一行 loadmodule /usr/local/redis/redis-stable/RedisBloom-1.1.1/rebloom.so,?如下圖
5. 重新啟動redis-server(注意:一定要使用我們剛才修改的redis.conf配置文件),連接進redis,運行命令可以查看所有已加載的module,可以看到布隆過濾器(模塊名:bf,版本:10101)
使用示例
1. bf.add 往一個布隆過濾器中添加單個元素(若該過濾器不存在時,會自動創建),成功添加返回1,失敗返回0
2. bf.madd 往一個布隆過濾器中添加多個元素(若該過濾器不存在時,會自動創建),返回一個數組,和請求參數一一對應,成功的為1,失敗的為0
3. bf.exists 判斷是否存在一個元素,存在的返回1,不存在的返回0,注意:布隆過濾器的最大特點,它返回0時表示元素一定不存在;返回1時元素大概率是存在的,極小概率不存在,這個誤判概率到底有多大決定于我們給它的配置
4. bf.mexists 判斷多個元素是否存在,返回一個數組,和請求參數一一對應,存在的為1,不存在的為0,注意:同樣存在誤判概率
5. bf.debug 查看一個布隆過濾器的信息
第一行的size表當前元素數,這里為7,注意這個值很大時不一定準確
第二行表第一層數據塊的信息,我們沒有使用bf.reserve指定配置時,布隆過濾器會自動初始化,當添加的元素超過當前容量時,會自動初始化下一層數據塊
bytes 表該層數據的字節數,128也就是128字節
bits 表該層數據的位數,1024也就是1024個位,其實就是前面的128字節*8=1024位
hashes 表哈希函數的個數
hashwitdth 不清楚,以后再研究
capacity 表該層的最大容量,106表最多可以放106個元素
size 表該層目前的元素數
ratio 表誤判率,就是前面的bf.exists返回的誤判率
6. bf.reserve 預設一個布隆過濾器的初始值,參數依次為:過濾器名字,誤判率,容量,容量只是我們建議的容量,它會根據實際情況調整
技巧
如果不知道誤判率,容量,實際占用空間,哈希函數個數這些設置多少合適,可以到這個網站上計算?https://hur.st/bloomfilter/?n=10000&p=0.001&m=&k=?輸入容量,誤判率后它會自動計算出來
如下圖所示:
預設容量為10000,誤判率為0.001(也就是0.1%)時,最佳的哈希函數是10個(這個影響布隆過濾器的效率),預計占用容量17.55K
你可以單獨修改容量,這時哈希函數的個數就會增加;也可以單獨修改哈希函數的個數,這時容量就會增加
想要最佳容量和性能時,建議使用它給的數值即可,這個是最優解,至于其中的數學證明知乎上有一篇不錯文章可以自行搜索
總結
以上是生活随笔為你收集整理的ubuntu16.04安装,使用redis布隆过滤器示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记ubuntu16.04的一个网络问题
- 下一篇: ubuntu搭建zookeeper集群