欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis HyperLogLog学习记录

程序员文章站 2022-07-11 15:36:35
...

说明

之前在说Redis集合数据结构的时候,我们知道集合中存储的是互不相同的元素,它的SADD命令用来添加元素,SCARD命令用来获取集合中元素的数量,故我们可以利用从该命令制作一个“唯一计数器”。例如记录一个网站的ip访问量。但是当一个网站热度很高被大规模访问时,我们要记录更长时间的访问量(例如一年),那如果再使用集合制作的唯一计数器来计数的话,将会非常的吃内存资源,且性能大幅度下降。这时我们就需要HyperLogLog帮忙了。
HyperLogLog是一种为了计算集合的基数而创建的概率算法,它能得到一个集合的近似基数,且这个近似基数与实际基数的误差在一个合理的范围内。
HyperLogLog的优点在于它计算近似基数的内存并不会因为集合的大小而改变,它进行计算所需的内存总是固定并且非常少的(实际上一个HyperLogLog只占用12kb内存空间就可以对2^64个元素进行计数,而算法的误差率只有0.81%)。

命令

PFADD

PFADD hyperloglog element [element ...]

对给定的一个或多个元素进行计数,若给定的所有元素已进行过计数,则命令返回0,若至少有一个未进行过计数,则命令返回1。该命令也可以用来去重(即判断元素是否已计过数)。

PFCOUNT

PFCOUNT hyperloglog [hyperloglog ...]

得到集合的近似基数。当该命令后跟多个hyperloglog时,则得到这多个hyperloglog并集计算后的近似基数。

PFMERGE

PRMERGE destination hyperloglog [hyperloglog ...]

计算多个hyperloglog的并集,并将计算后的hyperloglog存储到名为destination的键中。实际上PFCOUNT命令内部就使用了PFMERGE命令。

总结

HyperLogLog是一种概率算法,它用来得到集合的近似基数,它主要的用法是用来计数;也可用来进行去重;它不能得到集合中的成员。