每个 HyerLogLog 只需要使用 12k 字节内存,以及几个字节的内存来存储键本身。
-
pfadd
将任意数量的元素添加到指定的 HyperLogLog 里面。#pfadd key element [element ...] pfadd database 'redis' 'MongoDB' 'MySQL'
-
pfcount
当命令作用于单个 HyperLogLog 时,复制度为O(1)。127.0.0.1:6379> pfadd database mysql mongodb redis pgsql (integer) 1 127.0.0.1:6379> pfcount database (integer) 4 127.0.0.1:6379>
-
pfmerge
将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。127.0.0.1:6379> pfadd nosql "Redis" "MongoDB" "Memcached" (integer) 1 127.0.0.1:6379> pfadd REBMS "MySQL" "PostgreSQL" (integer) 1 127.0.0.1:6379> pfmerge database nosql RDBMS OK 127.0.0.1:6379> pfcount database (integer) 5
-
插件地址:
https://github.com/RedisLabsModules/rebloom#building-and-loading-rebloom
-
当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。
-
添加 bf.add codehole user1 判断是否存在 bf.exists codehole user1 批量添加 bf.madd codehole user2 user3 批量判断是否存在 bf.mexists codehole user1 user2
-
应用场景
- 在爬虫系统中,我们需要对 URL 进行去重,已经爬过的网页就可以不用爬了。
- 布隆过滤器可以显著的降低数据库的 IO 请求数量。当用户来查询某个 row 时,通过布隆过滤器可以显著降低数据库的 IO 请求数量。