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