Redis的HyperLogLog使用

210 阅读2分钟

来自文章集合:一文带你搞懂redis使用过程(持续更新中)

HyperLoglog

什么是概率线性结构 HyperLogLog是一种概率线性结构,概率性线性结构是通过一些概率统计的方法,用较小的存储空间近似地估算大规模数据集合中的某些特性或统计量。这种数据结构通常用于大规模数据的处理与分析中,能够在一定的误差范围内提供快速的近似结果。

什么是HyperLogLog 这个名字听起来可能有些复杂,但是它的工作原理其实很简单。你可以把它想象成一个盒子,你可以向这个盒子里放入很多小球,每个小球都有一个标签。HyperLogLog就是用来估算这些小球中有多少个不同标签的工具。

它的工作方式是,通过一些特殊的计数算法,将每个标签都映射成一个特殊的数字。这些数字之间的分布是随机的,但在处理大量数据时,这种随机分布具有一定的规律性。通过观察这些数字的分布规律,我们可以大致推测出盒子里有多少个不同的标签。

这样的方法虽然不是完全准确的,但是对于大数据场景来说,它的速度快、占用内存少,而且提供了一个比较接近真实情况的估算值。因此,它经常被用来处理像统计网站独立访客数、大数据流量分析等场景下的数据统计工作。

由上可以总结出HyperLogLog两大特点

  • 占用很小的内存空间,可以快速处理大量数据
  • 获得的结果是近似值而不是精确值

在拥有大量数据,不需要完全精确值的场景下,使用,比如需要一段时间内有多少不同的用户访问某个网页或使用了某个应用,HyperLogLog可以帮助你快速地得到一个近似的用户数量,让你更快地进行数据分析和决策。

如何使用

/*
	插入数据到key中:PFADD <key> <value> [value]
	查询不重复数据数目:PFCOUNT <key>
	合并多个HyperLogLog:PFMERGE <des_key> <source_key> [source_key]
*/
127.0.0.1:6379> PFADD mykey 1 2 3 4 5 3 4 6 8 9 7 9
(integer) 1
127.0.0.1:6379> PFCOUNT mykey
(integer) 9
127.0.0.1:6379> PFADD hll a b b c c d f e g s c d
(integer) 1
127.0.0.1:6379> PFCOUNT hll
(integer) 8
127.0.0.1:6379> PFMERGE mykey hll
OK
127.0.0.1:6379> PFCOUNT hll
(integer) 8
127.0.0.1:6379> PFCOUNT mykey
(integer) 17