|
几天前在学习钱文品老师的《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的安装和配置,后面我会单独再写一篇文章。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com


