HyperLogLog基数统计

HeJin大约 1 分钟数据库技术Redis

什么是基数?不重复的元素个数。可以接受误差。

简介

Redis2.8.9版本就更新了HyperLogLog数据结构。Redis HyperLogLog 基数统计的算法。

优点:占用的内存是固定的。2^64不同的元素的计数,只需要花费12KB内存。如果要从内存角度来比较的话HyperLogLog首选。

缺点:0.81%错误率。

UV。日活、月活。

传统的方式,set保存用户的ID,然后就可以统计set中的元素数量作为判断标准。这个方式如果保存大量的用户ID,就会比较麻烦。我们的目的是为了计数,而不是保存用户ID。

测试使用

127.0.0.1:6379> pfadd mykey a b c d e f j h i j a b f g				# 创建第1组元素 mykey
(integer) 1
127.0.0.1:6379> PFCOUNT mykey										# 统计mykey中元素的基数数量
(integer) 10
127.0.0.1:6379> pfadd mykey2 a b c d e f j h i j a b f g j n p m 	# 创建第2组元素 mykey2
(integer) 1
127.0.0.1:6379> PFCOUNT mykey2
(integer) 13
127.0.0.1:6379> PFMERGE mykey3 mykey mykey2				# 合并两组元素mykey、mykey2 => mykey3 并集
OK
127.0.0.1:6379> PFCOUNT mykey3							# 查看并集的数量
(integer) 13

如果允许容错,那么一定可以使用HyperLogLog。

如果不允许容错,就使用set或者自己的数据类型。