redis使用场景之HyperLogLog---应用于独立信息统计

如果我们统计不重复数据的数量,比如统计独立UV,我们会有如下方案:

原始方案:set

存储每个用户的id(字符串)

改进方案:bitmaps

存储每个用户状态(bit)

全新的方案:HyperLogLog

基数

首先我们来认识一下基数

{1,3,5,7,5,7,8}          基数集{1,3,5,7,8}            基数:5

Hyperloglog类型的基本操作

  • 添加数据
pfadd key element [element...]
  • 统计数据
pfcount key [key...]
  • 合并数据
pfmerge destkey sourcekey [sourcekey...]

操作如下:

         

h11为key,随便起,001,002代表用户id,或者可以放ip地址、人名等都可以

相关说明

  • 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据
  • 核心是基数估算算法,最终数值存在一定误差
  • 误差范围:基数估计得结果是一个带有0.81%标准错误的近似值
  • 耗空间极小,每个hyperloglog key占用了12k的内存用于标记基数
  • pfadd命令不是一次性分配12k内存使用,会随着基数的增加内存逐渐增大
  • pfmerge命令合并后占用的存储空间为12k,无论合并之前数据是多少

一般使用场景

统计注册 IP 数
统计每日访问 IP 数
统计页面实时 UV 数
统计在线用户数
统计用户每天搜索不同词条的个数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章