HyperLogLog
Posted lililixuefei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,基数估计就是误差可节省的范围内,快速计算基数;
如果要统计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统计