HyperLogLog

Posted lililixuefei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HyperLogLog相关的知识,希望对你有一定的参考价值。

HyperLogLog

简介

Redis 在 2.8.9版本添加了HyperLogLog结构
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的;
?
在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2的64次方个不同的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比;
但是,因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能想集合那样,返回输入的各个元素;
?
小知识:
什么是基数?
比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5,基数估计就是误差可节省的范围内,快速计算基数;

为什么需要HyperLogLog

如果要统计1亿个数据的基数值,大约需要内部才能100000000/8/1024/1024 约等于12M,内存减少占用的效果显著;
然而统计一个对象的基数值需要12M,如果统计10000个对象,就需要将近120G,同样不能广泛用于大数据场景;

常用命令

PFADD key element [element ...]:添加指定元素到HyperLogLog中
PFCOUNT key [key ...]:返回给定HyperLogLog的基数估算值
PFMERGE destkey sourcekey [sourcekey ...]:将多个HyperLogLog合并为一个HyperLogLog

应用场景

基数不大、数据量不大就用不上,会有点大材小用浪费空间

有局限性,就是只能统计基数数量,而没办法知道具体内容是什么

统计注册 IP 数
统计每日访问 IP 数
统计页面实时 UV 数
统计在线用户数
统计每天搜索不同词条的个数
统计真实文章阅读数

总结

  HyperLogLog是一种算法,并非redis独有,目的是做基数统计,故不是集合,不会保存元数据,知识记录数量而不是数值;

 耗费空间小,支持输入非常大体积的数据量;

 

以上是关于HyperLogLog的主要内容,如果未能解决你的问题,请参考以下文章

Redis进阶学习05---Feed流,GEO地理坐标的应用,bitmap的应用,HyperLogLog实现UV统计

redis使用HyperLogLog

HyperLogLog

Redis HyperLogLog及应用

Redis 基础 -- HyperLogLog概率算法(计算集合的近似基数)和HyperLogLog的常用命令

redis 简单整理——HyperLogLog[十三]