码迷,mamicode.com
首页 > 其他好文 > 详细

HyperLogLog

时间:2020-07-08 23:23:50      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:tab   var   占用   等于   and   对比   count   operator   内容   

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

标签:tab   var   占用   等于   and   对比   count   operator   内容   

原文地址:https://www.cnblogs.com/lililixuefei/p/13204763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!