文章

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:月活跃用户量

场景

  1. 统计某个网站的UV、统计某个文章的UV
  2. 用户搜索网站关键词的数量
  3. 统计用户每天搜索不同词条个数

网站首页UV的Redis统计方案

需求

  • UV的统计需要去重,一个用户一天内的多次访问只能算作一次

代码

//pfadd 添加ip
Long hll = redisTemplate.opsForHyperLogLog().add("hll", ip);


//pfcount 获取IP去重的访问量
redisTemplate.opsForHyperLogLog().size("hll");
License:  CC BY 4.0