Redis中HyperLogLog的使用小结

2025-05-09 14:50

本文主要是介绍Redis中HyperLogLog的使用小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Redis中HyperLogLog的使用小结》Redis的HyperLogLog是一种概率性数据结构,用于统计唯一元素的数量(基数),本文主要介绍了Redis中HyperLogLog的使用小结,感兴...

Redis 的 HyperLogLog 是一种概率性数据结构,用于统计唯一元素http://www.chinasem.cn的数量(基数),比如你想知道一个网站有多少独立访问用户(UV)。它的主要优点是:内存占用极小,无论你添加多少数据,它通常只占用 12KB 的内存。

下面是 HyperLogLog 的详细讲解:

一、HyperLogLog 是什么?

HyperLogLog 是一种基数估计算法,它可以用来估算一个集合中不同元素的数量(Cardinality)。和 Set 不同,Set 会存储所有元素,而 HyperLogLog 并不会保存具体的数据,只保存一种统计状态。

✅ 优点:可以统计大规模唯一元素数量,内存使用极低
❌ 缺点:不是精确统计,有误差范围 ±0.81%

️ 二、使用方法

1. 添加数据

PFADD key element [element ...]
PFADD myloglog user1 user2 user3

2. 查询基数

PFCOUNT key [key ...]
PFCOUNT myloglog

3. 合并多个 HyperLogLog

PFMERGE destkey sourcekey1 [sourcekey2 ...]
PFMERGE totalLog userLog1 userLog2

三、实际示例

# 添加一些用户ID
PFADD uv:20250414 user1 user2 user3 user4 user5

# 查询今天的 UV
PFCOUNT uv:20250414
# 返回 5

javascript# 添加重复的用户 ID(不会重复计数)
PFADD uv:20250414 user1 user2

# 再查一次
PFCOUNT uv:20250414
# 仍然是 5

四、原理简要(非必须了解)

HyperLogLog 基于概率算法,核心思想是:
哈希每个元素,观察哈希值的前缀中连续0的最大长度,利用这个统计信息估算基数。

  • 哈希函数让输入随机分布
  • 长连续 0 出现的概率很低,说明数据多
  • Redis 将结果分散到 2^14(16,384)个桶中,提高精度

五、适用场景

  • 网站 UV 统计(每天、每http://www.chinasem.cn小时用户访问数)
  • 活跃用户数统计
  • 数据去重统计但不需要精确结果的场合

⚠️ 六、注意事项

  • 无法获取添加了哪些元素(它不存数据)
  • 是估算值(不是精确值),精度误差为 ±0.81%
  • 永远只占用约 12KB 的内存(精确控制内存使用)

七、与 Set 对比

项目SetHyperLogLog
精度精确估算(±0.81%)
内存随数据增大恒定约 12KB
支持去重计数✅(基于概率)
支持元素查看❌(不存数据)
使用场景数据可控小集合超大规模数据统计

如果你有具体的使用场景或代码需求,也可以告诉我,我可以帮你写具体的 Redis 命令或 python/Lua 示例。需要吗?

到此这篇关于Redis中HyperLogLog的使用小结的文章就介绍到这了,更多相关Redis HyperLogLog使用内容请搜索编程China编程(www.cpChina编程pcns.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Redis中HyperLogLog的使用小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154542

相关文章

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化