REDIS11_HyperLogLog的概述、基本命令、UV、PV、DAU、MAU、首页UV如何进行统计处理
文章目录
- ①. 什么是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同样会有这个问题
- 基数计数则将每一个元素对应到bit数组中的其中一位,比如bit数组010010101(按照从零开始下标,有的就是1、4、6、8)
- 设一个样本案例就是一亿个基数位值数据,一个样本就是一亿
- 如果要统计1亿个数据的基数位值,大约需要内存100000000/8/1024/1024约等于12M,内存减少占用的效果显著。这样得到统计一个对象样本的基数值需要12M
- 如果统计10000个对象样本(1w个亿级),就需要117.1875G将近120G,可见使用bitmaps还是不适用大数据量下(亿级)的基数计数场景
- 但是bitmaps方法是精确计算的
- ③. 概率算法:
- 通过牺牲准确率来换取空间,对于不要求绝对准确率的场景下可以使用,因为概率算法不直接存储数据本身
- 通过一定的概率统计方法预估基数值,同时保证误差在一定范围内,由于又不储存数据故此可以大大节约内存
- HyperLogLog就是一种概率算法的实现
④. HyperLogLog的指令
- ①. HyperLogLog的基本指令
命令 | 作用 |
---|---|
pfadd key element | 将所有元素添加到key中 |
pfcount key | 统计key的估算值(不准确) |
pgmerge new_key key1 key2 | 合并key至新key |
- ②. 指令演示
⑤. 首页UV的Redis统计方案
- ①. 需求:UV的统计需要去重
- 淘宝、天猫首页的UV,平均每天是1~1.5个亿左右
- 每天存1.5个亿的IP,访问者来了后先去查是否存在,不存在加入
- 一个用户一天内的多次访问只能算作一次
- ②. 方案讨论
- mysql,数据库巨大
- 用redis的hash结构存储 - redis——hash = <keyDay,<ip,1>>
按照ipv4的结构来说明,每个ipv4的地址最多是15个字节(ip = “192.168.111.1”,最多xxx.xxx.xxx.xxx)
某一天的1.5亿 * 15个字节= 2G,一个月60G,数据量巨大
- 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如何进行统计处理相关推荐
- 一文辨明QPS、TPS、PV、UV、DAU、MAU、并发用户数、吞吐量~
1 QPS(Queries Per Second) 每秒查询率,一台服务器每秒能够响应的查询次数. 一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒的响应请求数,即最大吞吐能力. 2 ...
- 独立IP、PV、UV、DAU含义
IP: 独立IP数 指一天内使用不同IP地址的 用户访问网站的数量. 特点: 同一个IP无论访问多少网页,独立IP数均为1 1.PV: Page view页面浏览量 指一天内网站的浏览次数,它是衡量网 ...
- 数据化运营04 DAU、MAU、UV:谁是最有参考价值的活跃指标?
活跃类指标是重要的用户质量指标,代表了产品上真正的用户,代表了具备营销价值的用户群,是几乎所有产品运营的重点. 在这一讲中,我会主要向你介绍 UV.DAU.MAU,以及每日使用时长和每日打开频次等指标 ...
- 详解统计指标PV、IP、UV、VV
详解统计指标PV.IP.UV.VV.新UV 对于统计网站,PV.IP.UV.VV是基础的统计指标,弄清楚它的含义是非常有必要的. 以下是个人的思考,用了自己的语言表述 概述 最简单的是PV.IP,定义 ...
- 关键词:MAU,DAU,DAU/MAU
关键词:MAU,DAU,DAU/MAU 2010年12月3日 由 wucang留言 » 网页游戏数据参数关键词: MAU:全称Monthly Active Users,中文是指每月(游戏)活跃用户.多 ...
- 哪个是更早的时间 date_淘宝用户行为分析(漏斗模型+pv,uv,pv/uv,复购率,用户活跃时间段)...
数据来源https://tianchi.aliyun.com/dataset/dataDetail?dataId=46 用户行为表:用户ID,商品ID,用户行为.用户地点,商品大类ID,时间 需求:该 ...
- 淘宝中的UV,PV,IPV
淘宝中的UV,PV,IPV 1. UV & PV UV: 店铺各页面的访问人数,一个用户在一天内多次访问店铺被记为一个访客(去重) ; Unique visitors PV: 店铺内所有页面 ...
- 数据分析 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
很多运营都了解DAU(日活跃用户数)和MAU(月活跃用户数)的重要性,但在某些情况下这两个数值本身并不能反映出太多问题,这个时候就要引用到[DAU/MAU]的概念,即[日活/月活]. 用户粘性的两个计 ...
- 数据分析——用户粘性指标 DAU/MAU
( 一 )定义 DAU,即:Daily Active User,指日活跃用户数: MAU,即:Monthly Active User,指月活跃用户数. 日活/月活就是体现用户粘性最频繁使用的指标.日活 ...
最新文章
- 机器学习常用损失函数小结
- 内存屏障在硬件层面的实现原理
- linux 查看显卡信息
- koa router ajax,ajax 请求 koa2 router.post 404
- fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因
- Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
- zabbix 通过 zabbix-agent 方式监控 Windows主机
- 某考试 T3 sine
- css分页实例讲解,CSS 分页实例
- 十六进制编辑器--ImHex
- seo攻略书籍_推荐几本适合SEOer初学级书籍
- 10个可以为你的网页设计提供创造灵感的设计资源网站
- 面试题之细胞分裂问题
- android studio 自定义应用主题,Android studio 设置主题
- 如何高效的使用mac
- 用Matlab录制、读取音频
- 阿里巴巴计划今日中午推出1688.com批发网
- Web前端,HTML表格相关标签和属性,在网页中表格结构的显示
- backgroundworker类
- 【错题记录】JavaScript专项练习(篇四)