计算机网络/计算机科学与应用/系统/运维/开发

Redis HyperLogLog 基数统计

(用来做基数统计的算法,节省内存)

什么是基数?

比如数据集{1,3,5,7,5,7,8} 那么基数为 1 3 5 7 8 基数(不重复元素)为5


命令:PFADD

语法:PFADD key element [element...]

功能:将任意数量的元素添加到指定的 HyperLogLog里面

作为整个命令的副作用,HyperLogLog内部可能会被更新,以便反映一个不同的唯一元素估计数量

返回值:整数回复 如果HyperLogoLog的内部储存被修改了,那么返回1 否则返回0

127.0.0.1:6379> pfadd keywords php python mysql linux redis monodb
(integer) 1
127.0.0.1:6379> pfadd keywords oracle

(integer) 1
127.0.0.1:6379> pfadd keywords oracle
(integer) 0


命令:PFCOUNT

语法:PFCOUNT key [key ...]

功能:当PFCOUNT命令作用于单个键时,返回储存在给定键的HyperLogLog的近似基数

如果键不存在 返回0

当PFCOUNT命令作用于多个键时,返回所有给定HyperLogLog的并集的近似基数,这个

近似基数是通过将所有给定HyperLogLog合并至一个临时HyperLogLog来计算得出的

返回值:整数回复,给定HyperLogLog包含的唯一元素近似数量

127.0.0.1:6379> pfcount keywords
(integer) 7
127.0.0.1:6379> pfadd keywords php7 mysql8 redis6
(integer) 1
127.0.0.1:6379> pfcount keywords
(integer) 10


命令:PFMERGE

语法:PFMERGE destkey sourcekey [sourcekey...]

功能:将多个HyperLogLog合并 merge 为一个HyperLogLog

合并后的HyperLogLog的基数接近与所有输入HyperLogLog的

可见集合observed set的并集

返回值:字符串回复 返回ok

127.0.0.1:6379> pfmerge destkey  keywords keywords2
OK
127.0.0.1:6379> pfcount destkey
(integer) 10



redis

人各有命,但命运也从来不是随机发牌,而是每个人主动选择的结果。

评论

^