Redis深入学习笔记-03(HyperLogLog)

什么是HyperLogLog?

         HyperLogLog是Redis提供用来解决统计问题的一种数据结构。HyperLogLog提供不精确的去重计数方案,虽然不精确,但也不是非常离谱,标准误差在0.81%,这样的精确度已经满足绝大多数的统计需求了。

        如果要统计一个网页的UV(同一个用户一天之内的多次访问只能计数一次),该如何设计?肯定需要求每一个网页请求都需要带上用户的ID,无论是登录用户还是未登录用户都需要一个唯一ID来标识。

                                             

        方法1:为每一个页面设置一个独立的set集合来存储所有当天访问过此页面的用户ID,当一个请求过来时,就使用sadd将用户ID塞进去,再通过scard可以取出这个集合的大小,这个数字就是这个页面的UV数据。但是同时也存在问题,当访问量特别大的时候,爆款页面有几千万个UV,这时就需要一个很大的set集合来统计,这样的页面越多,需要的空间就越大,仅仅如果是为了一个去重计数的功能而浪费这么大的存储空间,难免有些不值得。

        方法2:使用HyperLogLog高级数据结构。需要一点代价就是,这个数据结构需要占据12KB的存储空间,不适合统计单个用户相关的数据。如果你的用户有上亿个,可以算算用set的空间成本是非常惊人的,这时HyperLogLog所使用的空间就差不多可以忽略了。不过也不用担心,Redis对HyperLogLog的存储进行了优化,在计数比较小时,它的存储空间采用稀疏矩阵存储,空间占用很小,仅仅在计数慢慢变大、稀疏矩阵占用空间渐渐超过了阈值时,才会一次性转变成稠密矩阵,才会占用12KB的空间。

        使用方法跟set类似:pfadd和pfcount,一个是增加计数,一个是获取计数。还有一个pfmerge,可以合并多个pf计数形成一个新的pf值。

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

失忆机器

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

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

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

打赏作者

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

抵扣说明:

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

余额充值