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安装使用redis入门教程
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 环境 Ubuntu 16.04 安装Redis服务器端 sudo apt-get install redis-server 安装完成后,Redis服务 ...
- Google布隆过滤器与Redis布隆过滤器详解
一.什么是布隆过滤器? 布隆过滤器可以用来判断一个元素是否在一个集合中.它的优势是只需要占用很小的内存空间以及有着高效的查询效率.对于布隆过滤器而言,它的本质是一个位数组:位数组就是数组的每个元素都只 ...
- ubuntu16.04 安装 oracle11g (2022.6.5)
ubuntu16.04 安装 oracle11g (2022.6.5) 参考博客如下: 原文链接:https://www.nakivo.com/blog/how-to-install-oracle-o ...
- 服务器环境部署:Redis布隆过滤器使用
老早就想在项目中用起来这个优秀的东西.只是成熟的项目又有很多私有客户部署,redis版本可能存在差异,为避免不必要的版本兼容或迁移,就没有大幅度的在成熟项目上使用.现新项目刚好有相关使用需求,所以理所 ...
- ubuntu16.04安装opencv3.4.1教程
最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅. 本教程原为3.3.0,但经过博主亲测,3.4.0.3.4.1皆适用 1.去官网下载opencv ...
- Ubuntu16.04 安装ftp
2019独角兽企业重金招聘Python工程师标准>>> Ubuntu16.04 安装ftp,根据依赖安装. 安装vsftpd. sudo apt-get install vsftpd ...
- ubuntu16.04 安装CAJViewer 以及 安装wine /deepin-wine 图标异常的解决
ubuntu16.04 安装CAJViewer 以及 安装wine /deepin-wine 图标异常的解决 通过deepin-wine 安装 cajviewer 之前装过deepin-wine 所以 ...
- ubuntu16.04 安装微信和qq
ubuntu16.04 安装微信和qq Ubuntu系统没有qq和微信很难受,所以前几天装了一下qq和微信,在此记录下来,以防忘记. 通过 https://github.com/wszqkzqk/de ...
- Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题
Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题 参考文章: (1)Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题 (2)https://www.cn ...
最新文章
- java加载不进去_java sql添加不进去
- boost::threadpool 调用类成员变量并传入参数 的方法
- ubuntu服务器mysql管理 第一弹
- adaboost mh matlab,Adaboost算法的前世今生
- 修正 010 Editor 模板文件 MachO.bt 的错误
- matlab 导入元胞,MATLAB导入xls文件以及cell的使用方法
- 什么为java运行时的环境_什么是JRE?Java运行时环境简介(一)
- Loader 知识梳理(2) initLoader和restartLoader的区别
- es6 Object.getOwnPropertyDescriptors()
- Eigen教程(11)之存储顺序
- Thinkpad蓝牙键盘驱动安装和常见问题
- Python实现的图片转字符画,附源码
- 关于ZEMAX13的中文设置
- Sampling Hair Density Field by Deterministic Importance Sampling
- SVN clean up报错
- C语言之根据摄氏温度求华氏温度
- [usaco3.2.4]ratios
- 2021年茶艺师(初级)考试题库及茶艺师(初级)试题及解析
- P4084 [USACO17DEC]Barn Painting
- 字符串处理 2015百度之星资格赛 1002 列变位法解密