您当前的位置: 首页 >  redis

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Redis数据类型 之 HyperLogLog

梁云亮 发布时间:2019-10-24 20:13:04 ,浏览量:1

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,占用的内存空间大大减少。

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0442s