Redis应用实践—HyperLogLog

简介

适用于精确度要求不是很高的统计需求。

比如你的网站上线运营了,老板想看看某个页面的uv有多少,你怎么办?

  1. 给每个页面分配一个zset集合,当一个新用户访问到了,我们把用户id塞进集合就可以了,最后用scard统计集合的数量就ok了。

这确实是一个比较简单可行的方案,但是如果你们的网站成了爆款,火爆的页面可能有几千万访问,怎么办?买内存条?

兄弟,大可不必..

Redis 为我们提供了一个数据结构就是为了给我们实现这样的功能的。

HyperLogLog在统计这样的数据时非常好用,因为它只占用非常少的空间。

使用方法

  • pfadd key userid0

  • pfcount key

  • 还可以使用pfmerge合并多个结果 真的是太贴心了

拓展阅读:指令为什么用pf开头?是因为HyperLogLog这个数据结构的发明人是Philippe Flajolet ,pf就是他名字的字母缩写。

Redis对HyperLogLog的存储进行了优化,在开始是,使用稀疏矩阵存储,空间占用很小,只有当超过了一定的阈值之后才会转变成稠密矩阵来存储,这时它将占用12kb的内存空间。