GreatSQL社区

搜索

reddey

redis数据库布隆过滤器的测试使用

reddey 已有 8 次阅读2026-6-26 14:44 |系统分类:运维实战

几天前在学习钱文品老师的《Redis深度历险:核心原理与应用实践》时,提到了布隆过滤器。先介绍一下钱文品老师,是一个redis数据库方面的资深专家,已经使用redis数据库达十余年,他的网名是“codehole”。所著《Redis深度历险:核心原理与应用实践》一书非常详细地分析介绍了该数据库的内核原理和应用。布隆过滤器简单说就是过滤器认为要查询的数据在集合中不存在,就一定不存在。布隆过滤器认为可能存在的数据,有可能存在,也有可能不存在。随着原始数据的大量增加,过滤器可能存在一些误差,但这个误差在可以接受的范围内。在下面的测试用例中,我们使用钱老师的网名做为KEY键名。

   用docker方式安装带布隆过滤器的redis数据库版本,布隆过滤器是在4.0以后数据库版本才有的功能。

[root@mytest1 docker]# docker run -d -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest

Unable to find image 'redislabs/rebloom:latest' locally

latest: Pulling from redislabs/rebloom

0a07ddcc5af3: Pull complete

5d0aeceef7ee: Pull complete

4a02433fe20c: Pull complete

815c81dd564b: Pull complete

2baaa995d3e6: Pull complete

6ca5efd8e862: Pull complete

025ea8eb3f93: Pull complete

ac84de2afa91: Pull complete

28383de59096: Pull complete

05c634c431d7: Pull complete

4f4fb700ef54: Pull complete

80a6c7e2c1f8: Pull complete

c962a125fb64: Pull complete

a1e112bfdeef: Pull complete

382389652055: Pull complete

feeada377123: Pull complete

2defad5d6c04: Pull complete

de0ae3a8832c: Pull complete

Digest: sha256:f8c0b6f9da01e24ce917d09e8d3bd13cb36914b5bdd3db73fc806e9771e0f361

Status: Downloaded newer image for redislabs/rebloom:latest

a606360d6fa4029c5c82f1c39564a5fcad6f22f0977f39cf2775e485ac098f19

[root@mytest1 docker]# docker ps

CONTAINER ID   IMAGE                      COMMAND                   CREATED              STATUS              PORTS                                         NAMES

a606360d6fa4   redislabs/rebloom:latest   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp   redis-redisbloom

上面的命令检查看到容器已经启动起来了

[root@mytest1 docker]# redis-cli

127.0.0.1:6379> ping

PONG

[root@mytest1 docker]# redis-cli --version

redis-cli 6.2.20

以上命令检查REDIS数据库的版本

[root@mytest1 docker]# redis-cli

127.0.0.1:6379> bf.add codehole user01

(integer) 1

127.0.0.1:6379> bf.add codehole user02

(integer) 1

127.0.0.1:6379> bf.add codehole user03

(integer) 1

127.0.0.1:6379> bf.add codehole user04

(integer) 1

127.0.0.1:6379> bf.add codehole user05

(integer) 1

127.0.0.1:6379> bf.add codehole user06

(integer) 1

127.0.0.1:6379> bf.add codehole user07

(integer) 1

127.0.0.1:6379> bf.add codehole user08

(integer) 1

127.0.0.1:6379> bf.add codehole user09

(integer) 1

127.0.0.1:6379> bf.add codehole user10

(integer) 1

以上命令用于插入测试用例数据,不过value是一条一条插入的。

127.0.0.1:6379> bf.madd codehole user10 user11

1) (integer) 0

2) (integer) 1

127.0.0.1:6379> bf.madd codehole user12 user13

1) (integer) 1

2) (integer) 1

以上命令插入测试数据时,是一次插入多个value。

127.0.0.1:6379> bf.mexists codehole user01 user10 user13

1) (integer) 1

2) (integer) 1

3) (integer) 1

127.0.0.1:6379>

127.0.0.1:6379> bf.mexists codehole user01 user10 user13 user15

1) (integer) 1

2) (integer) 1

3) (integer) 1

4) (integer) 0

用于测试数据是否存在,如果存在返回1,不存在返回0。

注:我的操作系统是centos stream 9,由于数据库是用DOCKER安装的,大家在安装前一定要先把DOCKER安装好。关于DOCKER的安装和配置,后面我会单独再写一篇文章。


评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2026-6-27 02:41 , Processed in 0.021746 second(s), 11 queries , Redis On.
返回顶部