Redis数据类型 之 HyperLogLog

Redis数据类型 之 HyperLogLog

基数统计(HyperLogLog)
基数是一种算法。比如一本英文著作由几百万个单词组成,但英文单词本身是有限的,在这几百万个单词中有许多重复的单词,去掉重复的,内存就足够存储了。比如数字集合{1,2,5,7,9,1,5,9}的基数集合为{1,2,5,7,9},那么基数为5。基数的作用是评估大约需要准备多少个存储单元去存储数据。基数不能存储元素。
HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。但是HyperLogLog也存在缺点,就是它是估计基数的算法,所以会有一定误差,而且无法获取具体的元素值。因此应用在对准确性不是很重要的场景,例如:QQ同时在线人数,网站IP访问数量等。
HyperLogLog是用来做基数统计的,它的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总量是固定很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。因为HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身。

HyperLogLog常用命令:

  • PFADD
    将指定的元素添加到指定的HyperLogLog 结构中。
    如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD 返回1,否则返回0。
    在这里插入图片描述

  • PFCOUNT
    参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数;如果该变量不存在,则返回0。
    当参数为多个key时,返回这些HyperLogLog的并集的近似基数,这个值是将所有给定key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的。
    返回的可见集合基数并不是精确值, 而是一个带有 0.81% 标准错误(standard error)的近似值。
    在这里插入图片描述

  • PFMERGE
    将多个 HyperLogLog 合并(merge)为一个 HyperLogLog,合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。
    合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面,如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的。
    在这里插入图片描述

具体应用:计算网站每天访问的独立IP数量。如果使用 set 集合存储每个 ip 的话,1个IP就需要占15个字节(xxx.xxx.xxx.xxx),如果每天有很多用户访问,需要统计很多天,则需要耗费很大的内存空间进行存放。而使用HyperLogLog,每天只需要12KB,占用的内存空间大大减少。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁云亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值