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
相关推荐
imDwAaY20 小时前
操作系统如何管理程序运行?从线程、进程到内存隔离与用户态切换:CS162 Note2
android·java·redis
码途行者21 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
草莓熊Lotso1 天前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
我不会起名字3221 天前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
我不会起名字3221 天前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
毕业设计7032 天前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
用户094248568032 天前
第1章:Redis 术语全景与单线程工作原理
redis·快应用·源码阅读
hflmwl82 天前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
用户84913717547162 天前
订单超时未支付自动取消实现方案 | 三种方案详解
redis·面试·rabbitmq
easyboot2 天前
Memurai Windows下的redis
redis