Redis HyperLogLog学习记录

说明

之前在说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是一种概率算法,它用来得到集合的近似基数,它主要的用法是用来计数;也可用来进行去重;它不能得到集合中的成员。

你可能感兴趣的:(Redis,Redis,HyperLogLog)