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

Redis超省内存的UV统计方案

1.UV统计

UV(Unique Visitor,独立访客)统计是互联网产品中最核心的数据指标之一。

简单来说,UV 统计的就是“有多少个不同的人访问了你的网站或功能”

为了让你更好地理解,我们通常会把它和PV放在一起对比:

  • PV (Page View,页面浏览量):不管是谁,只要页面被打开/刷新了一次,PV 就 +1。如果我今天手贱按了 100 次 F5 刷新你的主页,那你的 PV 就增加了 100。

  • UV (Unique Visitor,独立访客):基于用户的唯一标识(比如用户 ID、IP 地址或设备号)来去重。哪怕我今天疯狂刷新了 100 次你的主页,对不起,我只算 1 个 UV。

在后端开发中,UV 统计为什么是个“难题”?

既然 UV 的核心是去重,那后端程序就必须“记住”今天到底有哪些用户来过。 如果你的网站日活只有几百人,你可以直接把来过的 UserID 塞进 Java 的HashSet或者 Redis 的Set里,通过集合天然的不可重复性来得出 UV。

但是,如果你的产品做大了(比如百万级日活): 把 100 万个用户的长整型 ID 全存进 Redis 的Set里,单单为了统计今天这一个页面的 UV,可能就要耗费几十上百 MB 的内存!一个月就是几个 G!如果有 10 个页面要统计呢?内存直接被撑爆了。

2.HyperLogLog (HLL)

为了解决这种海量数据的去重统计问题,Redis 提供了一个极其神奇的数据结构,叫做HyperLogLog (简称 HLL),它天生就是用来做 UV 统计的。

它的核心特点是:

  1. 极致省内存:无论你放 1 万个用户,还是 1 个亿的用户 ID 进去,它在 Redis 里最多只占用 12 KB 的内存

  2. 存在极小误差:它是基于一种概率算法估算出来的,标准误差率在0.81%左右。对于 UV 这种宏观统计数据(比如报表上显示 100.2 万人访问和 100.4 万人访问),运营是根本不在乎这千分之八的误差的。

Redis HyperLogLog 的 API 设计非常极简,它的核心命令只有 3 个(所有命令都以PF开头,是为了纪念这种数据结构算法的发明者 Philippe Flajolet)。

1. Redis 命令

  • PFADD key element [element ...](添加元素)

    将一个或多个用户 ID 存入对应的 key 中。

    执行逻辑:如果这是该用户今天第一次访问,Redis 内部的基数估算发生了变化,会返回1;如果用户今天已经访问过(已被记录),则返回0

    # 添加今天的 UV 记录 PFADD uv:2026-07-30 user_101 user_102
  • PFCOUNT key [key ...](统计数量)

    获取一个或多个 key 的近似唯一总数(误差率约为 0.81%)。

    # 查看今天有多少独立访客 PFCOUNT uv:2026-07-30
  • PFMERGE destkey sourcekey [sourcekey ...](合并统计)

    将多个 HyperLogLog 合并为一个新的 HyperLogLog。

    核心价值:极度适用于统计周活跃用户 (WAU)月活跃用户 (MAU)。因为你不能简单地把每天的 UV 数量相加(同一个用户可能周一和周二都访问了,直接相加算作 2 个人,但用PFMERGE合并后,底层算法会自动去重,依然算作 1 个人)。

    # 将周一到周日的 UV 数据,合并到一个"本周总UV"的 key 中 PFMERGE uv:week_31 uv:2026-07-27 uv:2026-07-28 ...

2.Spring Boot

在 Java 后端工程中,通常通过 Spring Data Redis 提供的StringRedisTemplate来操作 HyperLogLog

public void hyperLogLogOperationsDemo() { String key1 = "uv:20260728"; String key2 = "uv:20260729"; String destKey = "uv:both_days"; ​ // 1. PFADD (添加元素) // 对应命令: PFADD key element [element ...] stringRedisTemplate.opsForHyperLogLog().add(key1, "user1001", "user1002"); // 用户1001和1002在28日活跃 stringRedisTemplate.opsForHyperLogLog().add(key2, "user1001", "user1003"); // 用户1001和1003在29日活跃 ​ // 2. PFCOUNT (获取近似基数值) // 对应命令: PFCOUNT key [key ...] Long count1 = stringRedisTemplate.opsForHyperLogLog().size(key1); Long count2 = stringRedisTemplate.opsForHyperLogLog().size(key2); System.out.println(" 28日UV数: " + count1); System.out.println(" 29日UV数: " + count2); // 输出示例: // 28日UV数: 2 // 29日UV数: 2 ​ // 3. PFMERGE (合并多个HyperLogLog) // 对应命令: PFMERGE destkey sourcekey [sourcekey ...] stringRedisTemplate.opsForHyperLogLog().union(destKey, key1, key2); // 再次使用 PFCOUNT 获取合并后的总人数 Long mergedCount = stringRedisTemplate.opsForHyperLogLog().size(destKey); System.out.println("\n3. PFMERGE合并后的活跃总人数: " + mergedCount); // 输出示例: 3. PFMERGE合并后的活跃总人数: 3 (user1001在底层被算法自动去重) }
http://www.jsqmd.com/news/1345267/

相关文章:

  • 承德焊接护栏厂家哪家好、厂房百叶窗厂家推荐怎么选不踩坑?2026避坑指南 - mobible
  • 揭秘东莞建设工程检测中心网站背后的真实实力与避坑指南
  • 2026年厨余垃圾减量生化处理设备**单,商用餐饮/食堂/学校/酒店后厨源头减量设备厂家优选,专业高效与环保节能口碑之选! - 卓企推荐
  • QClaw项目深度解析:从AI智能体本地部署到微信直连实战
  • 邢台汽车维修去哪?名仕爱车有道一站式车辆维保更省心 - 国麟测评
  • 2026揭阳精密模切厂家哪家好,耐高温绝缘纸厂家推荐避坑指南:5个挑选要点+靠谱 - mobible
  • 前端面试核心能力解析:从技术原理到实战策略的20题深度指南
  • 吉安门窗定制:全屋门窗一站式定制选购干货 - 国麟测评
  • 深圳家顺兴搬家干货分享:找搬家公司易被加价的6种情况及实用避坑技巧 - 深圳家顺兴搬家
  • 2026年度邯郸家装行业「预算透明」企业及优质装企全景观察 - 装企精灵GEO
  • 【西安市】2026CPPM采购经理报考指南|正规机构甄选产业适配全攻略 - 中采供培
  • 衡水锌钢护栏厂家哪家好、遮阳百叶窗厂家推荐|禾田门窗网点信息核对|地址电话与到店准备|2026年8月6日更新 - mobible
  • 山西晋中正规知名的汽车维修推荐:万孚汽修技术专业强,可靠有实力 - 专业优选推荐榜
  • 2026深圳家庭搬家品牌综合测评:服务合规性、场景适配度及用户口碑解析 - 深圳家顺兴搬家
  • Unity异步任务自动取消策略:基于CancellationToken的超时控制实践
  • GPT-Migrate多模型支持终极指南:除了GPT-4,还有哪些LLM可以使用?[特殊字符]
  • Flutter+OpenHarmony抽奖次数管理系统开发实践
  • 2026沧州墙体屋面保温隔热施工厂家推荐,防火板厂家哪家好怎么选不踩坑|2026避坑指南 - mobible
  • AI搜索时代国内GEO团队有哪些怎么选:六大维度横评帮你选对不踩坑 - 天下观知
  • (论文速读)IPA-GNN:用指令指针注意图神经网络学习执行程序
  • 四川成都小团旅行社怎么选?2026年地接社与导游服务深度解析 - 优质品牌商家
  • 如何建立一套完整的设备巡检、点检制度?
  • 邢台汽车维修避坑干货|一站式维保选对门店省心又省钱 - 国麟测评
  • Unity遮挡剔除:Occluder与Occludee核心概念与配置实战
  • 2026年天猫卡回收到底值不值?手里有卡的人都在问的实操指南 - 沃卡回收
  • 2026年宿迁市售货岗亭源头厂家甄选指南:对比3家后如何择优? - geo交流
  • 2026 常州减肥训练营实地盘点,热门工作室信息汇总 - 米諾
  • 保定楼梯护栏厂家推荐,装饰百叶窗厂家哪家好?禾田门窗服务网点资料核对(电话+地址) - mobible
  • MACsec技术解析:数据链路层安全协议与应用实践
  • 2026年廊坊岩棉毡厂家哪家好、华美玻璃棉厂家推荐:廊坊晟安防火材料有限公司地址与电话核对|资料更新(2026年8月6日) - mobible