扫码一下
查看教程更方便
redis 在 2.8.9 版本添加了 hyperloglog 结构。
hyperloglog是一种概率数据结构,用于对唯一事物进行计数(从技术上讲,这是指估计集合的基数)。通常,对唯一项目进行计数需要使用与要计数的项目数量成比例的内存量,因为您需要记住过去已经检索的元素,以避免多次对其进行计数。但是,有一组算法会以内存换取精度:我们最终会得到带有标准误差的估计量,在redis实现中,该误差小于1%。该算法的神奇之处在于,我们不再需要使用与所计数项目数量成正比的内存量,而是可以使用恒定数量的内存!在最坏的情况下为12k字节,如果我们的hyperloglog(从现在开始将它们称为hll
)看到的元素很少,则用到的内存将更少。
比如数据集 {1, 3, 5, 7, 5, 7, 8}
, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}
, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
以下示例演示了 hyperloglog 的工作过程:
redis 127.0.0.1:6379> pfadd jiyikey "redis"
1) (integer) 1
redis 127.0.0.1:6379> pfadd jiyikey "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> pfadd jiyikey "mysql"
1) (integer) 1
redis 127.0.0.1:6379> pfcount jiyikey
(integer) 3
下表列出了 redis hyperloglog 的基本命令:
序号 | 命令 | 说明 |
---|---|---|
1 | 添加指定元素到 hyperloglog 中 | |
2 | 返回给定 hyperloglog 的基数估算值 | |
3 | 将多个 hyperloglog 合并为一个 hyperloglog |