简言

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布隆过滤器示例相关推荐

  1. ubuntu16.04安装使用redis入门教程

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 环境 Ubuntu 16.04 安装Redis服务器端 sudo apt-get install redis-server 安装完成后,Redis服务 ...

  2. Google布隆过滤器与Redis布隆过滤器详解

    一.什么是布隆过滤器? 布隆过滤器可以用来判断一个元素是否在一个集合中.它的优势是只需要占用很小的内存空间以及有着高效的查询效率.对于布隆过滤器而言,它的本质是一个位数组:位数组就是数组的每个元素都只 ...

  3. ubuntu16.04 安装 oracle11g (2022.6.5)

    ubuntu16.04 安装 oracle11g (2022.6.5) 参考博客如下: 原文链接:https://www.nakivo.com/blog/how-to-install-oracle-o ...

  4. 服务器环境部署:Redis布隆过滤器使用

    老早就想在项目中用起来这个优秀的东西.只是成熟的项目又有很多私有客户部署,redis版本可能存在差异,为避免不必要的版本兼容或迁移,就没有大幅度的在成熟项目上使用.现新项目刚好有相关使用需求,所以理所 ...

  5. ubuntu16.04安装opencv3.4.1教程

    最近opencv3.4.1发布了,想换个新的试试鲜,于是把配置的过程通过博文的方式记录下来,方便查阅.  本教程原为3.3.0,但经过博主亲测,3.4.0.3.4.1皆适用 1.去官网下载opencv ...

  6. Ubuntu16.04 安装ftp

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu16.04 安装ftp,根据依赖安装. 安装vsftpd. sudo apt-get install vsftpd ...

  7. ubuntu16.04 安装CAJViewer 以及 安装wine /deepin-wine 图标异常的解决

    ubuntu16.04 安装CAJViewer 以及 安装wine /deepin-wine 图标异常的解决 通过deepin-wine 安装 cajviewer 之前装过deepin-wine 所以 ...

  8. ubuntu16.04 安装微信和qq

    ubuntu16.04 安装微信和qq Ubuntu系统没有qq和微信很难受,所以前几天装了一下qq和微信,在此记录下来,以防忘记. 通过 https://github.com/wszqkzqk/de ...

  9. Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题

    Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题 参考文章: (1)Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题 (2)https://www.cn ...

最新文章

  1. java加载不进去_java sql添加不进去
  2. boost::threadpool 调用类成员变量并传入参数 的方法
  3. ubuntu服务器mysql管理 第一弹
  4. adaboost mh matlab,Adaboost算法的前世今生
  5. 修正 010 Editor 模板文件 MachO.bt 的错误
  6. matlab 导入元胞,MATLAB导入xls文件以及cell的使用方法
  7. 什么为java运行时的环境_什么是JRE?Java运行时环境简介(一)
  8. Loader 知识梳理(2) initLoader和restartLoader的区别
  9. es6 Object.getOwnPropertyDescriptors()
  10. Eigen教程(11)之存储顺序
  11. Thinkpad蓝牙键盘驱动安装和常见问题
  12. Python实现的图片转字符画,附源码
  13. 关于ZEMAX13的中文设置
  14. Sampling Hair Density Field by Deterministic Importance Sampling
  15. SVN clean up报错
  16. C语言之根据摄氏温度求华氏温度
  17. [usaco3.2.4]ratios
  18. 2021年茶艺师(初级)考试题库及茶艺师(初级)试题及解析
  19. P4084 [USACO17DEC]Barn Painting
  20. 字符串处理 2015百度之星资格赛 1002 列变位法解密

热门文章

  1. [Regular] 2、正则表达式基础元字符及分组、捕获
  2. TopN算法与排行榜
  3. HDU多校2 - 6774 String Distance(序列自动机优化lcs)
  4. CodeForces - 1366E Two Arrays(组合数学+思维)
  5. Matlab中plot函数绘图基本用法
  6. HDU - 5017 Ellipsoid(三分套三分/模拟退火)
  7. PE文件结构详解(六)重定位
  8. (五)boost库之随机数random
  9. 重写数组的方法(改变原数组)
  10. Python OS和shutil模块的常见方法