Redis-新数据类型-Hyperloglog

新数据类型-Hyperloglog


简介

在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。

什么是基数?

数据集{1,2,5,7,5,7,9},那么这个数据集的基数集为{1,2,5,7,9},基数(不重复元 素)为5,基数估计就是在误差可接受范围内,快速计算基数。

如果是通过Redis来处理,我们可以使用String类型然后自增计数即可达到统计PV,统计UV可以使用 Set,每个用户id是唯一的可以放到这个集合里。

以上方案虽然结果准确,但随着数据不断增加,导致占用的内存空间越来越大,对于非常大的数据集是 不合适的。

Hyperloglog 是一种基数估算统计,在输入元素的数量特别巨大时,计算基数所需的空间是固定的,并 且很小。

在Redis中,每个Hyperloglog 只占用12KB内存,就可以计算接近 2 64 2^{64} 264个不同元素的基数。

因为HyperLogLog 只会更具输入元素来计算基数,而不会存储输入元素本身,所以Hyperloglog 不能像 集合那样,返回输入的各个元素。

常用命令

  1. pfadd key element1 element2……将所有元素参数添加到 Hyperloglog 数据结构中。

    如果至少有个元素被添加返回 1, 否则返回 0。

    pfadd book1 python sql 	添加两个元素,当前book1数量为2
    pfadd book1 python js 	添加一个元素,当前book1数量为3
    

    在这里插入图片描述

  2. pfcount key1 key2……计算Hyperloglog 近似基数,可以计算多个Hyperloglog ,统计基数总 数。

    pfcount book1 				计算book1的基数,结果为3
    pfadd book2 html css 		添加两个元素到book2中
    pfcount book1 book2 		统计两个key的基数总数,结果为5
    

    在这里插入图片描述

  3. pfmerge destkey sourcekey1 sourcekey2……将一个或多个Hyperloglog(sourcekey1) 合并 成一个Hyperloglog (destkey )。

    比如每月活跃用户可用每天活跃用户合并后计算。

    pfmerge book book1 book2 	将book1和book2合并成book,结果为5
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/687523.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python怎么卸载pip

pip是常用的python包管理工具,可以先安装pip,然后利用pip安装requests等包。 卸载pip很简单,只需要一句命令即可: sudo pip uninstall pip 然后会提示你是否确认卸载,输入“y”,按回车键即可。 卸载完成之…

如何从 Mac 上清空的垃圾箱中恢复已删除的文件

在 Mac 上删除的文件将被移至垃圾箱并保留 30 天,然后才会被永久删除。然而,许多 Mac 用户可能会意外清空垃圾箱,而没有意识到其中包含重要文件。本指南包含从清空的废纸篓中恢复 Mac 上已删除文件的所有有效方法。 当您意识到自己不小心清空…

NASA数据集——AMSR-E/Aqua L2B 全球扫描表面降水 GSFC 剖面算法 V003

AMSR-E/Aqua L2B Global Swath Surface Precipitation GSFC Profiling Algorithm V003 AMSR-E/Aqua L2B 全球扫描表面降水 GSFC 剖面算法 V003 简介 AMSR-E/Aqua Level-2B 降水产品包括南北纬 89.24 度之间无冰/无雪陆地和海洋的瞬时地表降水率和降水类型,沿轨道…

Html生成自定义函数的图形(2024/5/10)

大概效果如下: 可以自定义函数和x的定义域。 我们可以使用数学表达式解析库来解析用户输入的函数方程,并根据给定的 x 区间计算函数的值,然后使用图表库绘制图形。 在这里,我将使用 math.js 库来解析数学表达式,并使…

《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景

DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:延迟队列,其中元素只有在其预定…

【oj题】环形链表

目录 一. OJ链接: 环形链表 【思路】 快慢指针 ​编辑【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题? ​编辑【扩展问题】快指针一次走3步,走4步,...n步行吗? 二. OJ链接&#xff1a…

STM32:EXTI—外部中断的初始化

文章目录 1、中断1.2 中断系统1.3 中断执行流程 2、STM32中断2.2EXTI(外部中断)2.3 EXTI 的基本结构2.4 AFIO复用IO口 3、NVIC基本结构3.2 NVIC优先级分组 4、配置EXTI4.2 AFIO 库函数4.3 EXTI 库函数4.4 NVIC 库函数4.5 配置EXTI的步骤4.6 初始化EXTI 1…

LabVIEW MEMS电容式压力传感器测试系统

LabVIEW MEMS电容式压力传感器测试系统 随着微电子技术的发展,MEMS(微电机系统)技术在各个领域得到了广泛应用。MEMS电容式压力传感器以其高灵敏度、小尺寸、低功耗等优点,在微传感器领域占据了重要的地位。然而,这些…

【JavaEE网络】HTTPS详解:从对称与非对称加密到证书认证

目录 HTTPSHTTPS 是什么“加密” 是什么HTTTPS 的工作过程引入对称加密引入非对称加密引入证书完整流程总结 HTTPS HTTPS 是什么 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现…

上位机图像处理和嵌入式模块部署(树莓派4b和进程监控)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 虽然软件开发的时候,我们总是希望软件不要发生bug、不要有闪退、甚至于说不要有内存泄漏,但这也只是我们自己的一厢情愿而已…

一文了解spring的aop知识

推荐工具 objectlog 对于重要的一些数据,我们需要记录一条记录的所有版本变化过程,做到持续追踪,为后续问题追踪提供思路。objectlog工具是一个记录单个对象属性变化的日志工具,工具采用spring切面和mybatis拦截器相关技术编写了api依赖包&a…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限,拥有者是root,所属用户组为dialout2.2 查看dialout用户组成员,如图所示,普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…