Skip to content

HyperLogLog类型相关命令

用来做基数统计,也就是统计集合中不重复元素的个数。
HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数(一种不重复的数据集)所需的空间总是固定的、并且是很小的。
应用场景:统计某个网站的UV、统计某个文章的UV,用户搜索网站关键词的数量、统计用户每天搜索不同词条个数

1. PFADD命令

语法: PFADD key [element [element ...]]
将所有元素参数添加到HyperLogLog数据结构中,如果key不存在则新建,HyperLogLog内部储存被修改了返回1 , 否则返回0。

sh
127.0.0.1:6379> pfadd web.log 192.168.100.1 192.168.101.2 192.168.100.1 192.168.100.2
(integer) 1
127.0.0.1:6379> pfcount web.log
(integer) 3
127.0.0.1:6379> type web.log
string
## HyperLogLog并不保存数据,它是一个基数统计算法,下面返回的Redis内部的标识
127.0.0.1:6379> get web.log
"HYLL\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00Q3\x88V\xd9\x80OM\x90H\xa0"

2. PFCOUNT命令

语法: PFCOUNT key [key ...]
返回给定HyperLogLog的基数估算值。作用于单个键时,返回储存在给定键的HyperLogLog的近似基数,如果键不存在,那么返回0 。作用于多个键时,返回所有给定HyperLogLog的并集的近似基数,这个近似基数是通过将所有给定HyperLogLog合并至一个临时HyperLogLog来计算得出的。返回的可见集合(observed set)基数并不是精确值,而是一个带有0.81% 标准错误。

sh
127.0.0.1:6379> pfcount web.log
(integer) 3
127.0.0.1:6379> pfadd user_search baidu java web java hadoop web vue spark java
(integer) 1
127.0.0.1:6379> pfcount user_search
(integer) 6
127.0.0.1:6379> pfadd xiaomi_search car girl tour man english web baidu web
(integer) 1
127.0.0.1:6379> pfcount user_search xiaomi_search
(integer) 11

3. PFMERGE命令

语法: PFMERGE destkey [sourcekey [sourcekey ...]]
将多个HyperLogLog合并为一个HyperLogLog,合并后的HyperLogLog的基数估算值是通过对所有 给定HyperLogLog进行并集计算得出的。合并得出的HyperLogLog会被储存在destkey键里面,如果该键并不存在,那么命令在执行之前,会先为该键创建一个空的HyperLogLog

sh
127.0.0.1:6379> pfmerge user_result user_search xiaomi_search
OK
127.0.0.1:6379> pfcount user_result
(integer) 11