您的位置:首页 > 数据库 > Redis

Redis 学习笔记(十一)基数统计(HyperLogLog)

2017-11-17 11:03 239 查看
转自:http://blog.csdn.net/men_wen/article/details/70048093


1. 介绍

HyperLogLog命令是redis在2.8版本中加入的,Redis中HyperLogLog是用来做基数统计的。

HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的,因此每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基数。但是HyperLogLog也存在缺点,就是它是估计基数的算法,所以会有一定误差0.81%,而且无法获取具体的元素值。因此应用在对准确性不是很重要的场景,例如:QQ同时在线人数,网站IP访问数量等等。


2.HyperLogLog命令

PFADD 
将指定的元素添加到指定的HyperLogLog 结构中。
如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD 返回1,否则返回0。

PFADD key element [element ...]
1
127.0.0.1:6379> PFADD count user1 user2 user3   //往count中添加三个元素
(integer) 1                                     //添加成功
127.0.0.1:6379> PFCOUNT count                   //返回count这个键的估计值
(integer) 3
127.0.0.1:6379> PFADD count user1 user2 user3
(integer) 0                                     //添加失败,因为所有元素都已存在
127.0.0.1:6379> PFCOUNT count
(integer) 3                                     //还是3个
127.0.0.1:6379> PFADD count user3 user4         //添加成功,但是只添加不存在的user4元素
(integer) 1
127.0.0.1:6379> PFCOUNT count                   //估计值变成4个
(integer) 4
1
2
3
4
5
6
7
8
9
10
11
12
PFCOUNT 
参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0。
当参数为多个key时,返回这些HyperLogLog**并集**的近似基数,这个值是将所有给定key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的。
返回的可见集合基数并不是精确值, 而是一个带有 0.81% 标准错误(standard error)的近似值。

PFCOUNT key [key ...]
1
127.0.0.1:6379> PFADD count1 a b c d    //往count1添加4个元素
(integer) 1
127.0.0.1:6379> PFCOUNT count1          //返回估计值为4
(integer) 4
127.0.0.1:6379> PFADD count2 a c e f    //往count2添加4个元素
(integer) 1
127.0.0.1:6379> PFCOUNT count2          //返回估计值为4
(integer) 4
127.0.0.1:6379> PFCOUNT count1 count2   //返回count1和count2并集的估计值6
(integer) 6
1
2
3
4
5
6
7
8
9
10
PFMERGE 
将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。
合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的。

PFMERGE destkey sourcekey [sourcekey ...]
1
127.0.0.1:6379> PFMERGE count3 count1 count2    //将count1和count2合并到count3中
OK
127.0.0.1:6379> PFCOUNT count3                  //返回count3的估计值6
(integer) 6
1
2
3
4


3.基数统计的比较

有序集合、集合、HyperLogLog和位图(bitmap)四种统计元素基数的比较:

redis统计基数四种办法的比较
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: