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