一、基础概念
- UV(Unique Visitor)独立访客 一天内同一个用户不管访问多少次页面,只统计 1 次 ,统计的是去重人数。
- PV(Page View)页面访问量 用户每打开一次页面就记一次,多次访问会累加,统计总点击次数。
问题:如果用 Set 存用户 id 做 UV 统计,海量用户时内存开销极大。 方案:HyperLogLog,概率型基数统计结构,不存原始数据,只估算数量。
二、HyperLogLog 核心特点
- 底层基于 Redis String 实现,单个 HLL 最多占用 <16KB 内存,可以统计上亿级别的去重数量。
- 存在误差:标准误差 0.81%,适合 UV 这类允许少量误差的统计场景。
- ⚠️ 缺点:不能取出里面存入的原始元素,只能拿到估算总数;如果业务必须拿到所有用户明细,不能用 HLL。
三、三大核心命令
表格
| 命令 | 作用 |
|---|---|
PFADD key element [element...] |
往 HLL 中添加元素(用户标识:userId / 设备 id),重复添加无影响 |
PFCOUNT key [key...] |
获取估算的基数(UV 数量);传多个 key 会自动合并后返回总数 |
PFMERGE destkey sourcekey [sourcekey...] |
把多个 HLL 合并成一个 HLL,用于多渠道 UV 汇总 |
四、业务示例(每日 UV)
# 记录今天页面访问的用户
PFADD uv:20260927 user1001 user1002 user1003
# 再访问,重复用户添加不改变基数
PFADD uv:20260927 user1001
# 查询今日UV
PFCOUNT uv:20260927
# 合并两天UV到新key
PFMERGE uv:total uv:20260926 uv:20260927