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独有,目的是做基数统计,故不是集合,不会保存元数据,知识记录数量而不是数值;

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

相关推荐