当前位置: 首页 > 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左右

http://www.dtcms.com/a/86056.html

相关文章:

  • 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
  • AI比人脑更强,因为被植入思维模型【17】万物联系思维模型
  • 低功耗蓝牙(BLE)方案设计实战指南
  • 程序代码篇---SQLite数据库存储信息
  • 操作系统的特征
  • 程序设计语言的分类和特点
  • 学习本地部署DeepSeek的过程(基于ollama)
  • 产品经理如何管理需求池
  • Spring AOP 核心概念与实践指南
  • 图解模糊推理过程(超详细步骤)
  • DeepSeek、Grok 与 ChatGPT 4.5:新一代大模型架构与推理能力深度解析