redis--UV

一、基础概念

  1. UV(Unique Visitor)独立访客 一天内同一个用户不管访问多少次页面,只统计 1 次 ,统计的是去重人数。
  2. 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
相关推荐
ShineWinsu3 小时前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
Wang's Blog4 小时前
Java 项目实战: 外卖平台优化-使用Redis作为缓存产品与TTL配置
java·redis·缓存
一只旭宝8 小时前
【C++复习】四种类型转换 + 常见设计模式 + Redis/MySQL(后端面试复习完整版)
c++·redis·笔记·mysql·设计模式
ShineWinsu8 小时前
对于Redis:Redis特性以及应用场景的解析
linux·c++·redis·缓存·高并发·分布式系统·key-value
羑悻的小杀马特9 小时前
Docker高阶实战:从Redis集群到C++微服务,全面解析镜像优化与生产环境部署+镜像制作常见问题详解
c++·redis·docker·镜像制作·dockefile
程序猿乐锅18 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
阿狗童鞋19 小时前
Redis实战指南
数据库·redis·缓存
frjc20 小时前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch
panpan16191 天前
Redis命令大全
redis