Redis基础教程(十):HyperLogLog

news2025/1/11 14:06:02

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Redis系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

    • 引言
    • 一、HyperLogLog 工作原理
    • 二、Redis HyperLogLog 命令
    • 三、实战案例
      • 场景:网站独立访客计数
        • 步骤1:初始化 HyperLogLog
        • 步骤2:添加访客到 HyperLogLog
        • 步骤3:获取独立访客数的近似计数
      • 场景:多源数据的合并计数
        • 步骤1:初始化 HyperLogLog 并添加数据
        • 步骤2:合并多个 HyperLogLog
        • 步骤3:获取合并后的唯一元素计数
    • 四、总结

引言

在大数据处理中,精确计数唯一元素(如网站的独立访客数、用户行为分析中的唯一操作次数等)常常会面临存储和性能的双重挑战。传统的计数方法,如使用集合(Set)存储每个唯一元素,虽然能提供精确的结果,但在处理海量数据时会消耗大量的内存资源。这时,HyperLogLog 算法便展现出了其独特的优势。Redis 自版本 2.8.9 起,引入了 HyperLogLog 数据结构,为近似计数唯一元素提供了高效且节省内存的解决方案。本文将深入探讨 Redis HyperLogLog 的工作原理、使用方法及实战案例,帮助你理解并掌握这一强大的数据结构。

一、HyperLogLog 工作原理

HyperLogLog 是一种概率数据结构,它通过统计学方法对数据进行采样和估算,以极低的内存消耗实现对大规模数据集中唯一元素的近似计数。HyperLogLog 的核心思想是利用哈希函数的特性,对输入数据进行哈希转换后,观察哈希值中连续零的最长序列长度,以此来估计数据集中不同元素的数量。具体而言,HyperLogLog 分配了一系列的寄存器,每个寄存器存储着观察到的最长零序列的长度。通过不断更新这些寄存器,最终可以基于这些值的平均数来估算数据集的基数。

二、Redis HyperLogLog 命令

Redis 提供了以下命令来操作 HyperLogLog 数据结构:

  1. PFADD key element [element …]

    • 描述:将一个或多个元素添加到 HyperLogLog 中,用于估算基数。
    • 示例:PFADD myHyperLogLog user1 user2 user3
  2. PFCOUNT key [key …]

    • 描述:返回一个或多个 HyperLogLog 的估算基数。
    • 示例:PFCOUNT myHyperLogLog
  3. PFMERGE destkey sourcekey [sourcekey …]

    • 描述:将一个或多个 HyperLogLog 合并到另一个 HyperLogLog 中,用于合并不同数据集的基数估算。
    • 示例:PFMERGE total myHyperLogLog1 myHyperLogLog2

三、实战案例

场景:网站独立访客计数

假设我们正在运营一个大型网站,需要统计每天的独立访客数。由于访问量巨大,直接使用集合存储每个访客的唯一标识符会消耗过多的内存。这时,HyperLogLog 成为了理想的选择。

步骤1:初始化 HyperLogLog
redis-cli DEL unique_visitors
步骤2:添加访客到 HyperLogLog
redis-cli PFADD unique_visitors visitor1
redis-cli PFADD unique_visitors visitor2
redis-cli PFADD unique_visitors visitor3
步骤3:获取独立访客数的近似计数
redis-cli PFCOUNT unique_visitors

场景:多源数据的合并计数

假设我们有多个来源的数据,需要汇总统计其中的唯一元素数量。例如,我们可能有来自不同服务器的日志数据,每份日志记录了用户的行为,现在需要统计总的唯一用户行为数。

步骤1:初始化 HyperLogLog 并添加数据
redis-cli PFADD log1 user1 action1
redis-cli PFADD log1 user2 action2
redis-cli PFADD log2 user2 action3
redis-cli PFADD log2 user3 action4
步骤2:合并多个 HyperLogLog
redis-cli PFMERGE total_log log1 log2
步骤3:获取合并后的唯一元素计数
redis-cli PFCOUNT total_log

四、总结

Redis HyperLogLog 提供了一种高效且节省内存的方式来估算大规模数据集中的唯一元素数量。在处理海量数据时,HyperLogLog 不仅能大幅减少内存消耗,还能保持较高的计数精度,是大数据分析和实时统计领域的有力工具。掌握 HyperLogLog 的使用,将帮助你在数据处理和分析中更加游刃有余,提升系统的性能和可扩展性。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【Redis系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

Redis相关文章索引文章链接
Redis基础教程(一):redis配置Redis基础教程(一):redis配置
Redis基础教程(二):redis数据类型Redis基础教程(二):redis数据类型
Redis基础教程(三):redis命令Redis基础教程(三):redis命令
Redis基础教程(四):redis键(key)Redis基础教程(四):redis键(key)
Redis基础教程(五):string字符串Redis基础教程(五):string字符串
Redis基础教程(六):redis 哈希(Hash)Redis基础教程(六):redis 哈希(Hash)
Redis基础教程(七):redis列表(List)Redis基础教程(七):redis列表(List)
Redis基础教程(八):redis集合(Set)Redis基础教程(八):redis集合(Set)
Redis基础教程(九):redis有序集合Redis基础教程(九):redis有序集合

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握IP代理API提取技巧,让你的网络操作更高效!

IP代理在现代网络中扮演着越来越重要的角色。今天,我们将深入探讨IP代理的API提取知识,帮助大家更好地理解和应用这一技术。 IP代理API是什么? IP代理API是提供IP代理服务的接口,允许开发者通过编程方式自动获取和管理代理IP。通…

土壤养分检测仪——助力农田监测

在现代化的农业生产中,精准施肥、科学种植已成为提升作物产量与品质的关键。为了实现这一目标,土壤养分检测仪成为了农田科技的得力助手。这款仪器不仅配备了成品药剂和检测器材,还能在现场进行快速测定,广泛应用于农田土壤养分的…

干式电抗器的工作原理是什么

干式电抗器是电力系统中常用的无功补偿设备,主要用于调节电网的电压、提高功率因数、限制短路电流等。它的工作原理主要是通过在电路中引入一个与负载电流相反的磁场,从而产生一个与负载电流相抵消的电抗力,达到调节电压和功率因数的目的。 干…

昇思25天学习打卡营第12天|linchenfengxue

DCGAN生成漫画头像 通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。 GAN基础原理 生成式对抗网络(Generative Adversarial Networks,GAN)是一种生成式机器学习模型,是近年来复杂分布上无监督学习最具前景的…

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析 一、引言 随着互联网的普及和移动设备的广泛应用,网络游戏行业迅速崛起,成为全球娱乐市场的一大热门。菲律宾作为东南亚地区的重要国家,其网络游戏市场也呈现出蓬勃的发展势头。在这样的…

免费分享:2022年全国地铁站点数据(附下载方法)

数据简介 2022年全国地铁站点数据不仅反应我国城市交通网络的日益完善,也为城市规划、公共交通优化、商业布局、应急响应及智慧城市建设提供了宝贵的数据支持与参考,助力城市发展与居民生活质量的全面提升。 数据属性 数据名称:全国地铁站点…

iPhone苹果手机怎么取消腾讯视频VIP会员自动续费?

腾讯视频会员分为VIP(同时在线设备5台、同时播放设备2台;)和SVIP(同时在线设备8台、同时播放设备3台;),在iPhone苹果手机上开通腾讯视频连续包月、包季、包年后,需要手动取消才能关闭…

全网最全最细的jmeter接口测试教程,建议收藏

在日常工作中,尤其是做接口测试时,我们最经常用到的两个工具,就是Jmeter和postman。今天,我们主要是讲一讲Jmeter在接口测试这一块的一些方式方法。内容比较多,大家可以收藏一下,以后慢慢学。 1&#xff0…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

AJAX的概述 ,同步和异步的区别 ,AJAX 的交互模型和传统交互模型的区别

一. AJAX的概述 1.1 什么是ajax 同步: 异步: 1.AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 ​ 说明:异步:就是不同步。例如我们向后台发送请求,同步的方式是后台必…

南京·2024江苏眼睛健康产业展览会观众邀请·徐州站

6月29日,南京2024全国眼睛健康产业博览会暨眼科医学大会,组委会一行六人来到国家级历史文化名城-徐州,开启了南京全国眼博会江苏省十三个城市线下观众邀请的徐州站工作。徐州,作为华东重要门户城市,华东地区重要的科教…

牛客小白月赛97

A.三角形 判断等边三角形&#xff0c;题不难&#xff0c;代码如下&#xff1a; #include <iostream>using namespace std;int a[110];int main() {int n;cin >> n;int x;int mx 0;for(int i 1; i < n; i){cin >> x;mx max(mx, x);a[x];}for(int i 1…

layui-页面布局

1.布局容器 分为固定和完整宽度 class layui-container 是固定宽度 layui-fluid是完整宽度

【Python】Python的安装与环境搭建

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Python下载环境配置测试环境变量是否配置成功配置环境变量 运行Python交互式解释器&#xff1a;命令行脚本集成开发环境&#xff08;IDE&#xff1a;Integrated Development E…

【Python机器学习】模型评估与改进——回归指标

对于回归问题&#xff0c;可以像分类问题一样进行详细评估&#xff0c;例如&#xff0c;对目标值估计过高与目标值估计过低进行对比分析。 但是&#xff0c;对于我们见过的大多数应用来说&#xff0c;使用默认就足够了&#xff0c;它由所有回归器的score方法给出。业务决策有时…

四个Python代码片段,全面掌握下划线 “_”的妙用!

在Python的世界里&#xff0c;下划线“_”不仅是一个简单的符号&#xff0c;它还承载了许多编程的小技巧&#xff0c;可以让你的编码工作变得更加轻松和高效。 1、快速回顾&#xff1a;下划线在控制台的神秘力量 当你在Python控制台进行连续计算时&#xff0c;知道如何快速引…

智能胎教仪,科技与教育的融合-N9301胎教仪语音方案

随着科学技术的不断进步&#xff0c;人们对婴幼儿教育的认知也日趋成熟和全面。其中&#xff0c;胎教作为一种重要的早期教育方式&#xff0c;近年来备受瞩目。而胎教仪语音芯片的研发&#xff0c;正是为了满足这一需求&#xff0c;为胎儿的健康成长提供更加便捷的胎教方案。 一…

绝区零卡顿严重、延迟高的解决方法提前看

绝区零这款游戏背后是一个错综复杂的架空世界&#xff0c;仿佛一幅波澜壮阔的史诗画卷缓缓展开。在这个世界中&#xff0c;神秘莫测的“空洞”灾害如影随形&#xff0c;给大地带来了无尽的破坏和混沌。经过米哈游团队的精心雕琢&#xff0c;无论是画面UI的细腻呈现&#xff0c;…

Java 虚拟机 一

运行时数据区 我们先看线程隔离的数据区 程序计数器 程序计数器&#xff08; Program Counter Register&#xff09; 是一块较小的内存空间&#xff0c; 它可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执…

【Unity 3D角色移动】

【Unity 3D角色移动】 在Unity 3D中实现角色移动通常涉及到几个关键步骤&#xff0c;包括设置角色的物理属性、处理输入、更新角色的位置以及动画同步。下面是实现基本3D角色移动的步骤和示例代码&#xff1a; 步骤1&#xff1a;设置角色的物理属性 角色通常使用Character Co…