Redis-HyperLogLog数据类型及其常用命令详解

1.Redis概述

在这里插入图片描述

2.HyperLogLog数据类型

HyperLogLog(HLL)是一种用于近似计算大数据集合中唯一元素数量(基数)的概率性数据结构。

  1. 概率数据结构

    • HyperLogLog 使用的是一种概率算法,它可以在极少的内存消耗下估算出一个集合的基数(唯一元素的数量)。
    • 与传统的集合或哈希表不同,它的内存消耗不随元素数量线性增加,而是固定在一个较小的大小。
  2. 空间效率

    • 每个 HyperLogLog 实例只需要固定大小的内存,通常为 12 KB,无论处理的数据规模有多大。这使得它在处理海量数据时依然能够高效运行。
  3. 近似计算

    • HyperLogLog 提供的基数估计并非精确值,而是一个接近真实值的近似。
    • 误差率通常为 0.81% 左右,这对于大数据场景中的统计分析是可以接受的。
  4. 快速计算

    • 添加元素到 HyperLogLog、计算基数以及合并不同 HyperLogLog 实例的操作通常是常数时间复杂度(O(1)),即使数据集非常大也能够快速完成。

3.常用命令

1. PFADD

在这里插入图片描述

语法

PFADD key element [element ...]

功能
向指定的 HyperLogLog 数据结构中添加一个或多个元素。如果元素已经存在于结构中,它不会重复添加。

返回值

  • 整数类型,具体是 01
    • 返回 1 表示 HyperLogLog 的内部数据结构发生了变化(即至少有一个新元素被添加)。
    • 返回 0 表示所有添加的元素已经存在,内部数据结构未发生变化。

示例

启动 Redis 客户端:

redis-cli
  1. 向 HyperLogLog 添加一个元素:
127.0.0.1:6379> PFADD myhll "element1"
(integer) 1
  1. 向 HyperLogLog 添加多个元素:
127.0.0.1:6379> PFADD myhll "element2" "element3" "element4"
(integer) 1
  1. 再次添加已经存在的元素:
127.0.0.1:6379> PFADD myhll "element1" "element2"
(integer) 0

在这里插入图片描述


2. PFCOUNT

在这里插入图片描述
PFCOUNT 获取指定 HyperLogLog 结构的基数估计值。

语法

PFCOUNT key [key ...]

功能

  • 返回给定 HyperLogLog 结构的基数估计值,可以同时输入多个 key 进行统计。

  • 获取 HyperLogLog 结构的基数估计值,用于统计唯一元素的数量。

  • HyperLogLog 提供的基数估计并非精确值,而是一个接近真实值的近似。

  • 误差率通常为 0.81% 左右,这对于大数据场景中的统计分析是可以接受的。
    在这里插入图片描述

返回值

  • 整数类型,表示给定 HyperLogLog 结构的基数估计值。

示例

HyperLogLog 结构 myhll 包含了一些元素,可以使用以下命令获取其基数估计值:

127.0.0.1:6379> PFCOUNT myhll
(integer) 1000

多个 HyperLogLog 结构,也可以同时获取它们的基数估计值:

127.0.0.1:6379> PFCOUNT myhll1 myhll2 myhll3
(integer) 2500

在这里插入图片描述


3.PFMERGE

在这里插入图片描述

这个命令可以非常有效地将多个集合中的唯一元素计数合并起来,而不会显著增加内存消耗。
在这里插入图片描述
语法

PFMERGE destkey sourcekey [sourcekey ...]

参数

  • destkey:目标 HyperLogLog 的键名。合并后的结果将存储在这个键中。
  • sourcekey:一个或多个源 HyperLogLog 的键名,这些 HyperLogLog 结构将被合并到 destkey 中。

功能

将一个或多个源 HyperLogLog 结构合并到一个目标 HyperLogLog 结构中。

返回值

  • 简单字符串回复,通常是 OK

示例

  1. 创建和添加元素到 HyperLogLog

    127.0.0.1:6379> PFADD hll1 "element1" "element2" "element3"
    (integer) 1127.0.0.1:6379> PFADD hll2 "element3" "element4" "element5"
    (integer) 1127.0.0.1:6379> PFADD hll3 "element5" "element6" "element7"
    (integer) 1
    
  2. 合并 HyperLogLog 结构

    127.0.0.1:6379> PFMERGE merged_hll hll1 hll2 hll3
    OK
    
  3. 获取合并后 HyperLogLog 的基数估计值

    127.0.0.1:6379> PFCOUNT merged_hll
    (integer) 7
    

使用 PFCOUNT 命令来获取合并后 merged_hll 的基数估计值,结果为 7,因为合并后的集合包含 7 个唯一元素(“element1” 到 “element7”)。


应用场景

  • 去重计数
    • 用于统计网站访问的唯一用户数、广告点击的唯一用户数等。
  • 大数据分析
    • 在处理日志数据、用户活动记录等大规模数据时,用于快速计算独立用户数量。
  • 实时数据处理
    • 在流数据处理、实时分析中,能够快速更新和查询唯一元素的数量,适用于实时监控和反作弊系统。

在这里插入图片描述


更多的命令在官网哦~
在这里插入图片描述

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

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

相关文章

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统,可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章,以及对文章进行分类,打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术:Vu…

鸿蒙HarmonyOS服务卡片实战

引言 在现代开发中,服务卡片是不可或缺的一部分,比如音乐,天气类等应用,官网的介绍中写道:卡片让您便捷地预览服务信息,例如查看天气或日历日程等内容。您可将卡片添加到屏幕上,让这类信息触手…

[C++][设计模式][观察者模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受1.代码一1.FileSplitter.cpp2.MainForm.cpp 2.代码二1.FileSplitter.cpp2.MainForm.cpp 1.动机 在软件构建过程中,需要为某些对象建立一种“通知依赖关系” 一个对象(目标对象)的状态发生改变,所有的依赖对象…

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批…

一、企业级架构设计-archimate基础概念

目录 一、标准 二、实现工具 1、Archimate 1、Archimate 基本概念 1、通用元模型 2、结构关系 3、依赖关系 1、服务关系 2、访问关系 3、影响关系 1、影响方式 2、概念 3、关系线 4、案例 4、关联关系 4、动态、节点和其他关系 1、时间或因果关系 2、信息流 …

缓存层持久化

** 读缓存** 分布式缓存 先将所有的缓存数据集中存储在同一个地方,而非重复保存到各个服务器节点中,然后所有的服务器节点都从这个地方读取数据 使用MongoDB的公司最少,目前,Redis比Memcached更流行: (1&…

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 …

【剖析】为什么说RBF神经网络的误差为0

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 机器学习中的模型非常的多,但如果要问有没有这样的一个模型,它的训练误差为0,那么就非RBF神经网络莫属了!下面我们来聊聊,为什么RBF神经网络的训练误差为0。…

了解请求参数与响应参数的区别:初学者指南

在 Web 的开发领域,无论你是前端开发还是后端开发人员,把握请求与响应参数的核心差异是极其重要的。这些参数在客户端和服务器之间的互动中扮演着关键角色。 请求参数的定义及类别 定义 当客户端向服务器提交信息时所使用的数据被称为请求参数。这些参…

【Docker】Docker下载安装_使用阿里云加速配置

1、下载安装 1.1前提条件 安装环境: 目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位…

STM32上实现spwm调制原理分析

在STM32微控制器上实现SPWM(正弦脉宽调制,Sinusoidal Pulse Width Modulation)调制的核心是利用高频载波(三角波)与低频基波(正弦波)作比较得出。 那么在STM32里三角波和正弦波分别是什么&…

YzmCMS内核简约风非常不错的博客自媒体主题模板

本次发布的“Eric”主题模版文件中,已移除默认模版中一些非必要的模版,仅保留一些通用模版(首页、频道页、列表页、资源列表页、内容页、关于我/单页等),当前模版主题中提供的模版文件已经能够满足大部分网站使用。 YzmCMS内核简约风非常不错…

Java数据结构4-链表

1. ArrayList的缺陷 由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景…

明明设置允许跨域,为什么还会出现跨域请求的问题

一、问题 在微服务项目中,明明已经设置允许跨域访问: 为什么还会出现跨域请求问题? 二、为什么 仔细查看错误提示信息:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since t…

Cesium如何高性能的实现上万条道路的流光穿梭效果

大家好,我是日拱一卒的攻城师不浪,专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀,这是2024年输出的第20/100篇文章; 前言 在智慧城市的项目中,经常会碰到这样一个需求:领导要求将全市的道路…

Jenkins定时构建自动化(二):Jenkins的定时构建

目录 ​编辑 一、 jenkins定时构建语法: 1. 语法规则: 2. 常见用法举例 3. 再次举例 接上一篇:Jenkins定时构建自动化(一):Jenkins下载安装配置:Jenkins定时构建自动化(一):Jenkins下载安装配置-CSDN博客 …

常见的LED显示屏拼接优缺点解析

LED显示屏拼接技术在现代显示技术中占据了重要地位。随着市场需求的不断增长,各种拼接屏技术也不断发展,每种技术都有其独特的优势和不足。本文将详细解析常见的几种拼接屏技术,包括LED显示屏拼接、投影DLP拼接和等离子PDP拼接。 LED显示屏拼…

STM32CubeIDE提示找不到头文件(No such file or directory)的解决办法

0 前言 最近在使用STM32CubeIDE时,发现为工程添加了头文件路径,但编译的时候还是报错,提示找不到头文件: 1 解决办法 1.1 为工程添加头文件路径 右键我们的工程,然后添加头文件路径(最好是相对路径&am…

秋招突击——第八弹——Redis是怎么运作的

文章目录 引言正文Redis在内存中是怎么存储的面试重点 Redis是单线程还是多线程面试重点 内存满了怎么办?面试重点 持久化介绍面试重点 RDB持久化面试重点 AOF日志面试重点 总结 引言 差不多花了两天把redis给过了,早上也只背了一半,完成回去…

如何发现Redis热Key,有哪些解决方案?

什么是 hotkey? 如果一个 key 的访问次数比较多且明显多于其他 key 的话,那这个 key 就可以看作是 hotkey(热 Key)。例如在 Redis 实例的每秒处理请求达到 5000 次,而其中某个 key 的每秒访问量就高达 2000 次&#x…