redis中hyperloglog基数统计

redis中hyperloglog基数统计

1、简介

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

2、应用场景

说明:

  • 基数不大,数据量不大就用不上,会有点大材小用浪费空间
  • 有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么
  • 0.81%错误率,会有误差

一般使用:

  • 统计注册 IP 数
  • 统计每日访问 IP 数
  • 统计页面实时 UV 数
  • 统计在线用户数
  • 统计用户每天搜索不同词条的个数

参考资料:https://blog.csdn.net/maoyuanming0806/article/details/81814610

传统的方式:

set保存用户的id,然后就可以统计set中的元素数量作为判断的标准

这个方式如果保存大量的用户id,就会比较麻烦,而且浪费内存!我们的目的是为了计数,而不是保存用户id

3、测试使用

127.0.0.1:6379> PFADD mykey a b c d e f g h i j # 创建第一组元素mykey
(integer) 1
127.0.0.1:6379> PFCOUNT mykey # 统计mykey元素数量
(integer) 10
127.0.0.1:6379> PFADD mykey2 i j z x y w n m l # 创建第二组元素mykey2
(integer) 1
127.0.0.1:6379> PFCOUNT mykey2 # 统计第二组元素数量
(integer) 9
127.0.0.1:6379> PFMERGE mykey3 mykey mykey2 # 将第一组元素mykey和第二组元素mykey2合并成第三组元素mykey3(去重)
OK
127.0.0.1:6379> PFCOUNT mykey3 # 统计第三组元素的数量
(integer) 17
记得快乐
原文地址:https://www.cnblogs.com/Y-wee/p/14560742.html