首页 > 其他 > 详细

HyperLogLog在redis中的使用

时间:2020-04-09 09:57:07      阅读:55      评论:0      收藏:0      [点我收藏+]

一般我们评估一个网站,主要有两个指标

  1. pv(page, view),页面访问量
  2. uv(user,view),访问的用户

一般来说,pv和uv的 统计可以自己来做,也可以借助第三方工具。

自己如何实现:pv;可以通过计数器,key的话加上当前的日期,每当有用户请求的时候,hincrby自增一次,就实现了。但是uv的话,要处理另一个问题,就是去重:

       如何去重:需要前端每个用户生成唯一的id,无论是登录还是未登录,都需要一个唯一id,伴随着请求一起到达祸端,在后端,通过sadd,set集合去处理,因为set集合存储的话,是不能存重复的。然后通过scard统计集合的大小。进而得出uv数据。

但是如果有千万个uv,需要的存储空间是非常惊人的,像这种数量特别多的用户访问量的话,以便不需要特别精确。

所以可以使用HyperLogLog去数据类型去统计:

在redis中提供了HyperLogLog,就是专门解决这个问题的,但是不怎么精确,会有误差,误差数据为0.81%。

HyperLogLog一共提供了两个命令:pfadd,和pfcount

它的使用;

public class HyperLogLog {
    public static void main(String[] args) {
        Redis redis = new Redis();
        redis.execute(jedis -> {
            for (int i = 0; i < 1000; i++) {
                jedis.pfadd("uv", "u" + i, "u" + (i + 1));
           }
            long uv = jedis.pfcount("uv");
            System.out.println(uv);//理论值是 1001
       });
   }
}

实际打印出来是994.

除了前两个命令,还有一个命令pfmerge,是合并多个统计结果。在合并过程中,会自动去重多个集合中的元素。

HyperLogLog在redis中的使用

原文:https://www.cnblogs.com/javazl/p/12664107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!