文章目录

  • ①. 什么是UV、PV、DAU、MAU
  • ②. HyperLogLog的概述
  • ③. 去重复统计你先会想到哪些方式?
  • ④. HyperLogLog的指令
  • ⑤. 首页UV的Redis统计方案

①. 什么是UV、PV、DAU、MAU

  • ①. UV:Unique Visitor,独立访客,一般理解为客户端IP(需要去重考虑)

  • ②. PV:Page View,页面浏览量(不用去重)

  • ③. DAU:日活跃用户量(登录或者使用了某个产品的用户数(去重复登录的用户))

  • ④. MAU:MonthIy Active User,月活跃用户量

②. HyperLogLog的概述

  • ①. 在Redis里面,每个HyperLogLog的键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数
  • ②. 去重复统计功能的基数估计算法-就是HyperLogLog
    (用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算)
全集i={1,2,3,4,5,6,7,8,8,9,9,5}
去掉重复的内容
基数={1,2,3,4,5,6,7,8,9}
  • ③. 有误差,非精确统计,牺牲准确率来换取空间,误差仅仅只是0.81%左右
    这个误差如何来的?论文地址和出处,Redis之父安蒂雷斯回答

③. 去重复统计你先会想到哪些方式?

  • ①. 使用HashSet进行去重处理
 List<String> list=new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("c");list.add("d");HashSet<String>hashSet=new HashSet<>(list);// a,b,c,dSystem.out.println(hashSet);
  • ②. 如果数据显较大亿级统计,使用bitmaps同样会有这个问题
  1. 基数计数则将每一个元素对应到bit数组中的其中一位,比如bit数组010010101(按照从零开始下标,有的就是1、4、6、8)
  2. 设一个样本案例就是一亿个基数位值数据,一个样本就是一亿
  3. 如果要统计1亿个数据的基数位值,大约需要内存100000000/8/1024/1024约等于12M,内存减少占用的效果显著。这样得到统计一个对象样本的基数值需要12M
  4. 如果统计10000个对象样本(1w个亿级),就需要117.1875G将近120G,可见使用bitmaps还是不适用大数据量下(亿级)的基数计数场景
  5. 但是bitmaps方法是精确计算的
  • ③. 概率算法:
  1. 通过牺牲准确率来换取空间,对于不要求绝对准确率的场景下可以使用,因为概率算法不直接存储数据本身
  2. 通过一定的概率统计方法预估基数值,同时保证误差在一定范围内,由于又不储存数据故此可以大大节约内存
  3. HyperLogLog就是一种概率算法的实现

④. HyperLogLog的指令

  • ①. HyperLogLog的基本指令
命令 作用
pfadd key element 将所有元素添加到key中
pfcount key 统计key的估算值(不准确)
pgmerge new_key key1 key2 合并key至新key
  • ②. 指令演示

⑤. 首页UV的Redis统计方案

  • ①. 需求:UV的统计需要去重
  1. 淘宝、天猫首页的UV,平均每天是1~1.5个亿左右
  2. 每天存1.5个亿的IP,访问者来了后先去查是否存在,不存在加入
  3. 一个用户一天内的多次访问只能算作一次
  • ②. 方案讨论
  1. mysql,数据库巨大
  2. 用redis的hash结构存储 - redis——hash = <keyDay,<ip,1>>
    按照ipv4的结构来说明,每个ipv4的地址最多是15个字节(ip = “192.168.111.1”,最多xxx.xxx.xxx.xxx)
    某一天的1.5亿 * 15个字节= 2G,一个月60G,数据量巨大
  3. hyperloglog
    为什么是12Kb?每个桶取6位,16384*6÷8 = 12kb,每个桶有6位,最大全部都是1,值就是63
  • ③. 代码展示
@Service
@Slf4j
public class HyperLogLogService {@Resourceprivate RedisTemplate redisTemplate;/*** 模拟有用户来点击首页,每个用户就是不同的ip,不重复记录,重复不记录*/@PostConstructpublic void init() {log.info("------模拟后台有用户点击,每个用户ip不同");//自己启动线程模拟,实际上产不是线程new Thread(() -> {String ip = null;for (int i = 1; i <=200; i++) {Random random = new Random();ip = random.nextInt(255)+"."+random.nextInt(255)+"."+random.nextInt(255)+"."+random.nextInt(255);Long hll = redisTemplate.opsForHyperLogLog().add("hll", ip);log.info("ip={},该ip访问过的次数={}",ip,hll);//暂停3秒钟线程try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }}},"t1").start();}
}
@RestController
@Slf4j
public class HyperLogLogController {@Resourceprivate RedisTemplate redisTemplate;@ApiOperation("获得ip去重复后的首页访问量,总数统计")@RequestMapping(value = "/uv",method = RequestMethod.GET)public long uv() {//pfcountreturn redisTemplate.opsForHyperLogLog().size("hll");}
}

REDIS11_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理相关推荐

  1. 一文辨明QPS、TPS、PV、UV、DAU、MAU、并发用户数、吞吐量~

    1 QPS(Queries Per Second) 每秒查询率,一台服务器每秒能够响应的查询次数. 一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒的响应请求数,即最大吞吐能力. 2 ...

  2. 独立IP、PV、UV、DAU含义

    IP: 独立IP数 指一天内使用不同IP地址的 用户访问网站的数量. 特点: 同一个IP无论访问多少网页,独立IP数均为1 1.PV: Page view页面浏览量 指一天内网站的浏览次数,它是衡量网 ...

  3. 数据化运营04 DAU、MAU、UV:谁是最有参考价值的活跃指标?

    活跃类指标是重要的用户质量指标,代表了产品上真正的用户,代表了具备营销价值的用户群,是几乎所有产品运营的重点. 在这一讲中,我会主要向你介绍 UV.DAU.MAU,以及每日使用时长和每日打开频次等指标 ...

  4. 详解统计指标PV、IP、UV、VV

    详解统计指标PV.IP.UV.VV.新UV 对于统计网站,PV.IP.UV.VV是基础的统计指标,弄清楚它的含义是非常有必要的. 以下是个人的思考,用了自己的语言表述 概述 最简单的是PV.IP,定义 ...

  5. 关键词:MAU,DAU,DAU/MAU

    关键词:MAU,DAU,DAU/MAU 2010年12月3日 由 wucang留言 » 网页游戏数据参数关键词: MAU:全称Monthly Active Users,中文是指每月(游戏)活跃用户.多 ...

  6. 哪个是更早的时间 date_淘宝用户行为分析(漏斗模型+pv,uv,pv/uv,复购率,用户活跃时间段)...

    数据来源https://tianchi.aliyun.com/dataset/dataDetail?dataId=46 用户行为表:用户ID,商品ID,用户行为.用户地点,商品大类ID,时间 需求:该 ...

  7. 淘宝中的UV,PV,IPV

    淘宝中的UV,PV,IPV 1.  UV & PV UV: 店铺各页面的访问人数,一个用户在一天内多次访问店铺被记为一个访客(去重) ; Unique visitors PV: 店铺内所有页面 ...

  8. 数据分析 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)

    很多运营都了解DAU(日活跃用户数)和MAU(月活跃用户数)的重要性,但在某些情况下这两个数值本身并不能反映出太多问题,这个时候就要引用到[DAU/MAU]的概念,即[日活/月活]. 用户粘性的两个计 ...

  9. 数据分析——用户粘性指标 DAU/MAU

    ( 一 )定义 DAU,即:Daily Active User,指日活跃用户数: MAU,即:Monthly Active User,指月活跃用户数. 日活/月活就是体现用户粘性最频繁使用的指标.日活 ...

最新文章

  1. 机器学习常用损失函数小结
  2. 内存屏障在硬件层面的实现原理
  3. linux 查看显卡信息
  4. koa router ajax,ajax 请求 koa2 router.post 404
  5. fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因
  6. Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
  7. zabbix 通过 zabbix-agent 方式监控 Windows主机
  8. 某考试 T3 sine
  9. css分页实例讲解,CSS 分页实例
  10. 十六进制编辑器--ImHex
  11. seo攻略书籍_推荐几本适合SEOer初学级书籍
  12. 10个可以为你的网页设计提供创造灵感的设计资源网站
  13. 面试题之细胞分裂问题
  14. android studio 自定义应用主题,Android studio 设置主题
  15. 如何高效的使用mac
  16. 用Matlab录制、读取音频
  17. 阿里巴巴计划今日中午推出1688.com批发网
  18. Web前端,HTML表格相关标签和属性,在网页中表格结构的显示
  19. backgroundworker类
  20. 【错题记录】JavaScript专项练习(篇四)

热门文章

  1. hyperledger fabric交易流程
  2. 使用iperf测试网络性能
  3. 企业员工虚拟股权激励制度
  4. 【taro +vue】初体验
  5. python爬虫精进参考答案_高校邦数据科学创新通识课【Python爬虫】课后习题答案...
  6. Python判断变量的类型
  7. JS判断对象是否为空对象的几种方法
  8. 【C语言】C语言函数
  9. WIN7下网络共享设置
  10. Linux系统下,下载谷歌浏览器