当前位置: 首页 > news >正文

Redis 7.x 系列【12】数据类型之基数统计(HyperLogLog)

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 常用命令
      • 2.1 PFADD
      • 2.2 PFCOUNT
      • 2.3 PFMERGE
    • 3. 应用场景

1. 概述

基数表示数据集中不重复元素的个数。例如 {1,2,2,3,4,5,5}中,基数集(不重复的元素)为 {1,2,3,4,5},那么该数据集的基数(不重复元素的个数)为5

Redis 2.8.9 版本引入了 HyperLogLog 用于基数统计的算法,用于估算一个集合中不同元素的数量(基数),在处理大量数据时具有显著的空间效率优势。

特点:

  • 空间效率:在输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且很小。具体来说,每个 HyperLogLog 键只需要花费约12KB的内存,就可以估算接近2^64个不同元素的基数。
  • 误差:由于是估算算法,存在一定的误差,标准误差大约是 0.81%
  • 不存储元素:只会根据输入元素来计算基数,而不会存储输入元素本身,因此不能像集合那样返回输入的各个元素。

2. 常用命令

所有命令:

命名描述
PFADD添加指定元素到 HyperLogLog
PFCOUNT返回给定 HyperLogLog 的基数估算值
PFDEBUG内部命令,仅用于开发测试
PFMERGE将多个 HyperLogLog 合并为一个
PFSELFTEST内部命令,仅用于开发测试

2.1 PFADD

PFADD 命令将所有元素参数添加到 HyperLogLog 数据结构中。如果内部储存被修改了, 那么返回 1 , 否则返回 0

基本语法:

PFADD key element [element ...]

示例:

redis> PFADD hll a b c d e f g
(integer) 1
redis> PFCOUNT hll
(integer) 7

2.2 PFCOUNT

PFCOUNT 用于计算 HyperLogLog 集合的近似基数。

基本语法:

PFCOUNT key [key ...]

注意事项:

  • 因为 HyperLogLog 是一个近似数据结构,所以 PFCOUNT 返回的结果并不是精确的基数,但它在大多数情况下都足够接近真实值。
  • PFCOUNT 命令的时间复杂度是 O(1),无论 HyperLogLog 集合的大小如何,执行该命令所需的时间都是恒定的。

示例:

redis> PFADD hll foo bar zap
(integer) 1
redis> PFADD hll zap zap zap
(integer) 0
redis> PFADD hll foo bar
(integer) 0
redis> PFCOUNT hll
(integer) 3
redis> PFADD some-other-hll 1 2 3
(integer) 1
redis> PFCOUNT hll some-other-hll
(integer) 6

2.3 PFMERGE

PFMERGE 命令是用于将多个 sourcekey 合并到一个新的 destkey 中,合并后的 destkey 将包含所有源 sourcekey 的并集的近似基数。

命令语法:

PFMERGE destkey sourcekey [sourcekey ...]

使用示例:

# 使用PFADD命令向两个HyperLogLog键(hll1和hll2)中添加元素。
redis> PFADD hll1 foo bar zap a  
(integer) 1  
redis> PFADD hll2 a b c foo  
(integer) 1  
# PFMERGE命令将hll1和hll2合并到新的HyperLogLog键hll3中
redis> PFMERGE hll3 hll1 hll2  
OK  
# 使用PFCOUNT命令来验证hll3的基数是否等于hll1和hll2的并集的基数
redis> PFCOUNT hll3  
(integer) 6

3. 应用场景

常用于需要统计大量数据集合中不同元素数量的场景,如:

  • UV 统计:统计网站的独立访客数量。
  • PV统计:统计页面的浏览量
  • DAU/MAU统计:统计日活跃用户量(DAU)和月活跃用户量(MAU),以评估网站或应用的运营情况。

UV 统计,即独立访客(Unique Visitor)数量的统计,在网站分析和在线业务中是非常重要的指标。需要确保每个访问者的唯一标识是唯一的,以避免重复计数。

示例,添加访问的用户ID

localhost:0>PFADD uv:20240624 1 2 3 
"1"
localhost:0>PFADD uv:20240624 2 3 5 
"1"

统计UV

localhost:0>PFCOUNT uv:20240624
"4"

相关文章:

Redis 7.x 系列【12】数据类型之基数统计(HyperLogLog)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 PFADD2.2 PFCOUNT2.3 PFMERGE 3. 应用场景 1. 概述 基数表示数…...

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型(LLM )和检索增强生成(RAG)技术构建,提供开箱即用的数据处理、模型调用等能力,可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…...

基于Java的蛋糕预定系统【附源码+LW】

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法,但这种管理方法存…...

Java框架的原理主要基于以下几个核心

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!!

已解决javax.xml.bind.MarshalException:在RMI中,参数或返回值无法被编组的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 实现…...

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…...

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言&#xff0c;熟悉重装系统的方法可以帮助他们解决各种问题&#xff0c;从提高系统速度到修复软件故障。然而具体来讲&#xff0c;笔记本重装系统怎么操作呢&#xff1f;接下来&…...

【高考志愿】计算机

目录 一、专业概述 二、就业方向 三、选择建议 四、注意事项 五、计算机专业学科排名 高考志愿选择计算机专业&#xff0c;无疑是一个充满挑战与机遇的决策。这个专业以其广泛的应用领域、前沿的技术研究和可观的就业前景&#xff0c;吸引了无数考生的目光。 一、专业概述…...

使用ExpandableListView创建可扩展列表

使用ExpandableListView创建可扩展列表 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何使用Android中的ExpandableListView创建可扩展列…...

酒店新零售模式,亚朵酒店众筹模式, 社交新零售商业模式

抓住会员的需求&#xff0c;通过众筹让上万铁杆粉丝成为微股东&#xff01; 作为一家高端酒店&#xff0c;它拥有近2000万会员&#xff0c;这些会员还抢着掏钱帮它开酒店。而且&#xff0c;这家酒店还直接融资了19亿&#xff0c;计划上市。这家酒店在全国开设了1000多家店&…...

2010-2023年 省级、地级市、地市州盟保障性住房面积数据

保障性住房是政府为解决中低收入家庭住房问题而实施的一项重要政策&#xff0c;旨在通过提供限定价格或租金的住房&#xff0c;实现社会公平和稳定。以下是对省级、地级市、地市州盟保障性住房面积数据的介绍&#xff1a; 数据简介 定义&#xff1a;保障性住房包括廉租住房、…...

Java 语言特定指南

Java 语言特定指南 本 Java 入门指南将教您如何使用 Docker 创建一个容器化的 Spring Boot 应用程序。在本模块中&#xff0c;您将学习如何&#xff1a; 使用 Maven 容器化并运行一个 Spring Boot 应用程序设置本地开发环境以将数据库连接到容器、配置调试器&#xff0c;并使…...

国内多个库被 rsc 钉上 Go 耻辱柱。。。

大家好&#xff0c;我是煎鱼。 这还是比较突然的&#xff0c;下午正努力打工。国内社区群里突然就闹腾起来了。 仔细一看&#xff0c;原来是 Go 核心团队负责人 rsc&#xff0c;又冷不丁搞大招 &#x1f605;。他直接把国内好几个知名库给直接钉上了 Go 源码库的耻辱柱上了。 如…...

elasticsearch源码分析-03选举集群状态

选举集群状态 es中存储的数据有一下几种&#xff0c;state元数据、lucene索引文件、translog事务日志 元数据信息可以分为&#xff1a; 集群层面的元信息-对应着metaData数据结构&#xff0c;主要是clusterUUid、settings、templates等索引层面的元信息-对应着indexMetaData数…...

MySQL 重要参数优化

max_connections = 3000 innodb_buffer_pool_size = 8G max_allowed_packet = 32M innodb_file_io_threads = 8 innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M 参数说明 max_connections = 3000 运行MySQL的最大连…...

软件测试之接口测试(Postman/Jmeter)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&#xff0c;比如你需要从别的系统来…...

14 卡尔曼滤波及代码实现

文章目录 14 卡尔曼滤波及代码实现14.0 基本概念14.1 公式推导14.2 代码实现 14 卡尔曼滤波及代码实现 14.0 基本概念 卡尔曼滤波是一种利用线性系统状态方程&#xff0c;通过系统输入输出观测数据&#xff0c;对系统状态进行最优估计的算法。由于观测数据包括系统中的噪声和…...

计算机视觉 图像融合技术概览

在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量。 多视图融合可以提高图像的分辨率,同时恢复场景的 3D 表示。多模态融合结合了来自不同传感器的图像,称为多传感器融…...

计算机网络课程实训:局域网方案设计与实现(基于ensp)

文章目录 前言基本要求操作分公司1分公司2总部核心交换机配置实现内部服务器的搭建acl_deny部分用户与服务器出口出口防火墙配置 前言 本篇文章是小编实训部分内容&#xff0c;内容可能会有错误&#xff0c;另外ensp对电脑兼容性及其挑剔&#xff0c;在使用之前一定要安装好。…...

【安全开发】内网扫描器

文章目录 前言现实现的功能较少后序开发会逐步加入简单漏洞探探测和代理功能。 一、开发过程1.项目结构2.main.go3.core模块3.1 scanner.go3.2 service.go 4.bruteforc4.1 bruteforce.go 二、使用步骤 前言 为什么要写这个&#xff1f; fscna被杀的概率太高&#xff08;哪天二…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...

GC1808:高性能音频ADC的卓越之选

在音频处理领域&#xff0c;高质量的音频模数转换器&#xff08;ADC&#xff09;是实现精准音频数字化的关键。GC1808&#xff0c;一款96kHz、24bit立体声音频ADC&#xff0c;以其卓越的性能和高性价比脱颖而出&#xff0c;成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(八)

uboot启动异常及解决 网络问题及解决 打开STM32CubeMX选中ETH1 - A7NS&#xff08;Linux&#xff09;Mode&#xff1a;RGMII&#xff08;Reduced GMII&#xff09;勾选ETH 125MHz Clock Input修改GPIO引脚如图所示 Net: No ethernet found.生成代码后&#xff0c;修改u-boot下…...