当前位置: 首页 > news >正文

黑马点评-UV统计

UV、PV

但UV统计在服务器端实现会很麻烦,因为要判断过该用户是否统计过了,需要将统计过的用户信息进行保存,若将所有访问过的用户都存储在redis,会消耗大量的内存,所以redis中HyperLogLog

HyperLogLog

hyperloglog是从loglog算法派生出的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。HLL是基于String结构实现的,单个HLL的内存永远小于16kb,内存占用及其小,但由于它的测量结果是由概率性的,小于0.81%的误差,但完全可以忽略不计,同时HLL里面的元素是不可重复的,即使相同的用户连续访问,也只记录一次该用户

相关命令

PFADD插入的是用户的id,用于统计,PFMERGE用于合并,可以合并一周的,一个月的,一年的记录的数据

 可以看到,重复记录了元素e1,e2,e3..但之后记录一次

模拟UV统计

    @Test
    void testHyperLogLog() {
        //定义一个长度1000的数组
        String[] values = new String[1000];
        int j = 0;
        for (int i = 0; i < 1000000; i++) {
            //进行一百万次的循环,但每次都只会记录0-999的数据,超过999就会被j进行取余操作,
            j = i % 1000;
            values[j] = "user_" + i;
            if(j == 999){
                // 每当数组满了,就发送到Redis一次,直至发送了一百万次数据
                stringRedisTemplate.opsForHyperLogLog().add("hl2", values);
            }
        }
        // 统计数量
        Long count = stringRedisTemplate.opsForHyperLogLog().size("hl2");
        System.out.println("count = " + count);
    }

输出

误差在0.22%左右,并且内存大概占用14kb左右

相关文章:

  • 2025前端面试题记录
  • 23种设计模式-创建型模式-工厂方法
  • 【USTC 计算机网络】第三章:传输层 - 传输层概述及其服务、多路复用与解复用、无连接传输:UDP
  • Python 集合操作大全:从入门到精通,新手学习避坑指南
  • Web PKI技术基础知识
  • 小蓝的操作————(java)差分数组
  • Linux冯诺依曼体系与计算机系统架构认知(8)
  • 【Python】装饰器相关知识点
  • 20届智能车赛规则已完成搜索
  • spring-security原理与应用系列:建造者
  • AI Agent开发大全第七课-个人如何申请到靠谱的AI
  • git日常学习
  • 五、重学C++—类(封装继承)
  • QT实现WPS功能
  • AI:如何用 MeloSpyGUI 和 MeloSpySuite 生成爵士音乐文件
  • 如何让自动驾驶汽车“看清”世界?坐标映射与数据融合概述
  • Java学习路线(便于理解)
  • “统计视角看世界”专栏阅读引导
  • 接上一主题,直接对二进制进行加密,密钥不写入电脑。
  • .NET 9 彻底改变了 API 文档:从 Swashbuckle(Swagger) 到 Scalar
  • 上海天文馆走进徐家汇书院,XR沉浸式天文科普体验再推力作
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案
  • 女生“生理期请病假要脱裤子证明”?高校回应:视频经处理后有失真等问题
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 一条铺过11年时光的科学红毯,丈量上海科创的“长宽高”
  • 戛纳打破“疑罪从无”惯例,一法国男演员被拒之门外