Redis中HyperLogLog的使用小结

 更新时间:2025年05月09日 11:22:47   作者:BirdMan98  
Redis 的 HyperLogLog 是一种概率性数据结构,用于统计唯一元素的数量(基数),本文主要介绍了Redis中HyperLogLog的使用小结,感兴趣的可以了解一下

Redis 的 HyperLogLog 是一种概率性数据结构,用于统计唯一元素的数量(基数),比如你想知道一个网站有多少独立访问用户(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

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

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

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

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

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

💡 五、适用场景

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

⚠️ 六、注意事项

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

🧪 七、与 Set 对比

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

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

到此这篇关于Redis中HyperLogLog的使用小结的文章就介绍到这了,更多相关Redis HyperLogLog使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Redis缓冲区机制

    浅谈Redis缓冲区机制

    本文主要介绍浅谈Redis缓冲区机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Redis与缓存解读

    Redis与缓存解读

    文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步缓存写入模式,还讨论了缓存常见问题
    2025-01-01
  • 关于Redis解决Session共享问题

    关于Redis解决Session共享问题

    这篇文章主要介绍了Redis解决Session共享问题,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • redis配置文件中常用配置详解

    redis配置文件中常用配置详解

    这篇文章主要介绍了redis配置文件中常用配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • redis实现存储帖子的点赞状态和数量的示例代码

    redis实现存储帖子的点赞状态和数量的示例代码

    使用Redis来实现点赞功能是一种高效的选择,因为Redis是一个内存数据库,适用于处理高并发的数据操作,这篇文章主要介绍了redis实现存储帖子的点赞状态和数量的示例代码,需要的朋友可以参考下
    2023-09-09
  • Redis在多线程情况下写入失败的问题及解决

    Redis在多线程情况下写入失败的问题及解决

    文章描述了在JRE 7 32位环境下使用Jedis客户端并发调用`set`方法时出现的问题,怀疑是多线程环境下获取连接导致的卡死,通过使用连接池和在JDK 8 64位环境下进行测试,问题得到解决
    2025-11-11
  • 详谈redis优化配置和redis.conf说明(推荐)

    详谈redis优化配置和redis.conf说明(推荐)

    下面小编就为大家带来一篇详谈redis优化配置和redis.conf说明(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Redis MCP 客户端应用配置的实现示例

    Redis MCP 客户端应用配置的实现示例

    本文详细介绍配置客户端应用使用Redis MCP服务,客户端配置包括自动配置和手动配置两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • 安装Redis就那么几步,很简单

    安装Redis就那么几步,很简单

    Redis是一种非关系型数据库(NoSQL),NoSQL是以key-value的形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,本文重点给大家介绍安装Redis的步骤,需要的朋友参考下吧
    2018-11-11
  • redis lua脚本解决高并发下秒杀场景

    redis lua脚本解决高并发下秒杀场景

    这篇文章主要为大家介绍了redis lua脚本解决高并发下秒杀场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论