01-Redis 特殊数据类型之 bloom-filter

简介

参考:布隆过滤器

安装

Redis 4.0 之后才提供了布隆过滤器。布隆过滤器是作为一个插件加载到 Redis Server 中的,要使用布隆过滤器,需要在 Redis 中安装布隆过滤器插件,步骤如下:

  1. 下载 redisbloom 插件(Redis官网下载即可)

    下载地址:https://github.com/RedisLabsModules/redisbloom/

    找到最新的 tag 下载 tar.gz 格式

    1
    [root@redis]# wget https://github.com/RedisLabsModules/rebloom/archive/v1.1.1.tar.gz
  2. 解压并安装,生成 .so 文件

    1
    2
    3
    4
    5
    [root@redis]# tar -zxvf v1.1.1.tar.gz
    [root@redis]# cd redisbloom-1.1.1/
    [root@redisbloom-1.1.1]# make
    [root@redisbloom-1.1.1]# ls
    contrib Dockerfile docs LICENSE Makefile mkdocs.yml ramp.yml README.md rebloom.so src tests
  3. 在 Redis 配置文件(redis.conf)中加入该模块。

    1
    2
    3
    4
    5
    6
    7
    [root@redis]# vim redis.conf

    #####################MODULES#################### # Load modules at startup. If the server is not able to load modules

    # it will abort. It is possible to use multiple loadmodule directives.

    loadmodule /usr/local/redis/redisbloom-1.1.1/rebloom.so
  4. 启动 Redis。

    1
    [root@redis]# redis-server redis.conf
  5. 测试是否安装成功。

    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> bf.add users user2
    (integer) 1
    127.0.0.1:6379> bf.exists users user2
    (integer) 1
    127.0.0.1:6379> bf.exists users user3
    (integer) 0

布隆过滤器的基本用法

布隆过滤器有两个基本指令,它的用法和 set 集合的 saddsismember 差不多。

  • bf.add 添加元素,bf.add 只能一次添加一个元素,如果想要一次添加多个,就需要用到 bf.madd 指令
  • bf.exists 查询元素是否存在,同样如果需要一次查询多个元素是否存在,就需要用到 bf.mexists 指令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
127.0.0.1:6379> bf.add codehole user1
(integer) 1
127.0.0.1:6379> bf.add codehole user2
(integer) 1
127.0.0.1:6379> bf.add codehole user3
(integer) 1
127.0.0.1:6379> bf.exists codehole user1
(integer) 1
127.0.0.1:6379> bf.exists codehole user2
(integer) 1
127.0.0.1:6379> bf.exists codehole user3
(integer) 1
127.0.0.1:6379> bf.exists codehole user4
(integer) 0
127.0.0.1:6379> bf.madd codehole user4 user5 user6
1) (integer) 1
2) (integer) 1
3) (integer) 1
127.0.0.1:6379> bf.mexists codehole user4 user5 user6 user7
1) (integer) 1
2) (integer) 1
3) (integer) 1
4) (integer) 0

上面使用的布隆过过滤器只是默认参数的布隆过滤器,它在我们第一次 add 的时候自动创建。

Redis 也提供了可以自定义参数的布隆过滤器,只需要在 add 之前使用 bf.reserve 指令显式创建就好了。如果对应的 key 已经存在,bf.reserve 会报错。

bf.reserve 有三个参数,分别是 keyerror_rate(错误率) 和 initial_size

  • error_rate 越低,需要的空间越大,对于不需要过于精确的场合,设置稍大一些也没有关系。
  • initial_size 表示预计放入的元素数量,当实际数量超过这个值时,误判率就会提升,所以需要提前设置一个较大的数值避免超出导致误判率升高。

默认的 error_rate0.01,默认的 initial_size100


01-Redis 特殊数据类型之 bloom-filter
https://flepeng.github.io/041-Redis-41-核心概念-01-Redis-特殊数据类型之-bloom-filter/
作者
Lepeng
发布于
2021年1月1日
许可协议