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