在Redis中,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同的基数。
HyperLogLog只能统计基数的大小(也就是数据集的大小,集合的个数),他不能存储元素的本身,不能向set集合那样存储元素本身,也就是说无法返回元素。
二、命令
2.1 PFADD key element [element …]
将任意数量的元素添加到指定的 HyperLogLog 里面,当PFADD key element [element …]指令执行时,如果HyperLogLog的估计近似基数在命令执行之后出现了变化,那么命令返回1,否则返回0,如果HyperLogLog命令执行时给定的键不存在,那么程序将先创建一个空的HyperLogLog结构,再执行命令。
该命令可以只给定key不给element,这种以方式被调用时:
- 如果给定的键存在且已经是一个HyperLogLog,那么这种调用不会产生任何效果
- 如果给定的键不存在,那么命令会闯进一个空的HyperLogLog,并且给客户端返回1
返回值:
如果HyperLogLog数据结构内部存储的数据被修改了,那么返回1,否则返回0
2.2 PFCOUNT key [key …]
PFCOUNT 指令后面可以跟多个key,当PFCOUNT key [key …]命令作用于单个键时,返回存储在给定键的HyperLogLog的近似基数,如果键不存在,则返回0;当PFCOUNT key [key …]命令作用于多个键时,返回所给定HyperLogLog的并集的近似基数,这个近似基数是通过将索引给定HyperLogLog合并至一个临时HyperLogLog来计算得出的。
返回值:
返回给定HyperLogLog包含的唯一元素的近似数量的整数值
127.0.0.1:6379> pfadd count java
(integer) 1
127.0.0.1:6379> pfadd count php
(integer) 1
127.0.0.1:6379> pfadd count python
(integer) 1
127.0.0.1:6379> pfcount count
(integer) 3
127.0.0.1:6379> pfadd count python
(integer) 0
127.0.0.1:6379> pfcount count
(integer) 3
127.0.0.1:6379>