HyperLogLog简介

HyperLogLog 是一个专门为了计算集合的基数而创建的概率算法,对于一个给定的集合,HyperLogLog 可以计算出这个集合的近似基数:近似基数并非集合的实际基数,它可能会比实际的基数小一点或者大一点,但是估算基数和实际基数之间的误差会处于一个合理的范围之内,因此那些不需要知道实际基数或者因为条件限制而无法计算出实 际基数的程序就可以把这个近似基数当作集合的基数来使用。

HyperLogLog 的优点在于它计算近似基数所需的内存并不会因为集合的大小而改变,无论集合包含的元素有多少个,HyperLogLog 进行计算所需的内存总是固定的,并且是非常少的。具体到实现上,Redis 的每个 HyperLogLog 只需要使用 12KB 内存空间,就可以对接近:264 个元素进行计数,而算法的标准误差仅为 0.81%,因此它计算出的近似基数是相当可信的。

本章将对 Redis 中 HyperLogLog 的各个操作命令进行介绍,通过使用这些命令,用户可以:

  • 对集合的元素进行计数。

  • 获取集合当前的近似基数。

  • 合并多个 HyperLogLog,合并后的 HyperLogLog 记录了所有被计数集合的并集的近似基数。

在介绍 HyperLogLog 命令的同时,本章还会说明如何通过这些命令去实现一个只需要固定内存的唯一计数器,以及一个能够检测出重复信息的检查器。