Redis数据类型之hyperloglog
Redis数据类型之hyperloglog
HyperLogLog是一种估计集合基数的概率数据结构。Redis的HyperLogLog最多使用12 KB的内存大小,并且标准误差为0.81%。
HyperLogLog用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算。
基数是一种数据集,去重复后的真实个数
Redis中的HyperLogLog在实际存储时被编码为Redis字符串,因此可以使用GET
来序列化HyperLogLog,并SET
将其反序列化回服务器。
命令
PFADD 将元素添加到HyperLogLog 如果不存在则创建
PFADD key [element [element ...]]
PFACOUNT 返回HyperLogLog key 的近似基数
PFCOUNT key [key ...]
PFMEGRE 将多个HyperLogLog值合并为一个
PFMERGE destkey [sourcekey [sourcekey ...]]
PFDEBUG 用于调试的内部命令
PFDEBUG subcommand key
PFSELFTEST 用于测试的内部命令
PFSELFTEST
- 每次看到新元素时,使用
PFADD
将其添加到计数中。 - 当查询使用
PFADD
命令添加的唯一元素的当前近似值时,使用PFCOUNT
命令。 - 合并两个不同的HLL可以使用
PFMERGE
命令。由于HLL提供唯一元素的近似值,合并的结果为两个源HLL中唯一元素数量的近似值。
> PFADD bikes Hyperion Deimos Phoebe Quaoar
(integer) 1
> PFCOUNT bikes
(integer) 4
> PFADD commuter_bikes Salacia Mimas Quaoar
(integer) 1
> PFMERGE all_bikes bikes commuter_bikes
OK
> PFCOUNT all_bikes
(integer) 6
- UV
Unique Visitor,独立访客,一般理解为客户端IP,需要去重考虑
- PV
Page View,页面浏览量 ,不用去重
- DAU
Daily Active User:日活跃用户量,登录或者使用了某个产品的用户数(去重复登录的用户),常用于反映网站、互联网应用或者网络游戏的运营情况
- MAU
MonthIy Active User:月活跃用户量
场景
- 统计某个网站的UV、统计某个文章的UV
- 用户搜索网站关键词的数量
- 统计用户每天搜索不同词条个数
网站首页UV的Redis统计方案
需求
- UV的统计需要去重,一个用户一天内的多次访问只能算作一次
代码
//pfadd 添加ip
Long hll = redisTemplate.opsForHyperLogLog().add("hll", ip);
//pfcount 获取IP去重的访问量
redisTemplate.opsForHyperLogLog().size("hll");
License:
CC BY 4.0