黑马点评-UV统计

UV、PV

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

HyperLogLog

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

相关命令

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

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

模拟UV统计

java 复制代码
    @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左右

相关推荐
leo03082 天前
新一代python管理工具--uv
开发语言·python·uv
dudly2 天前
Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战
python·项目管理·版本管理·uv·包管理·环境管理
MerlinTheMagic5 天前
uv管理spaCy语言模型
人工智能·语言模型·uv
Scoful5 天前
快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
开发语言·python·uv
救救孩子把5 天前
使用 uv 工具快速部署并管理 vLLM 推理环境
大模型·模型部署·uv·虚拟环境·vllm
Bro_Of_Nagi5 天前
模型重展UV后绘制纹理
uv
xyl8665 天前
Python 包管理器 uv 介绍
python·uv
Ombré_mi7 天前
MCP客户端Client开发流程
大模型·uv·deepseek·mcp·mcp客户端
LitchiCheng14 天前
Python UV 环境下的 PyKDL 运动学库安装
开发语言·python·uv
HakunamatataWang17 天前
python 包管理工具uv
python·uv