扫码一下
查看教程更方便
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 | PFADD key element [element ...] | 添加指定元素到 HyperLogLog 中 |
2 | PFCOUNT key [key ...] | 返回给定 HyperLogLog 的基数估算值 |
3 | PFMERGE destkey sourcekey [sourcekey ...] | 将多个 HyperLogLog 合并为一个 HyperLogLog |