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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • k8s部署redis哨兵的实现

    k8s部署redis哨兵的实现

    本文主要介绍了k8s部署redis哨兵的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Redis中List类型的常用命令

    Redis中List类型的常用命令

    本文主要介绍了Redis中List类型的常用命令,包含12种常用命令,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 详解Redis中的简单动态字符串和C字符串的区别

    详解Redis中的简单动态字符串和C字符串的区别

    简单动态字符串(SDS)和 C 字符串在实现和特性上存在一些区别,这些区别使得 SDS 更适合作为 Redis 中字符串对象的内部表示,本文给大家介绍一下Redis中的简单动态字符串和C字符串的区别,需要的朋友可以参考下
    2023-12-12
  • redis内存空间效率问题的深入探究

    redis内存空间效率问题的深入探究

    redis缓存固然高效,可是它会占用我们系统中宝贵的内存资源,那该如何解决呢?这篇文章主要给大家介绍了关于redis内存空间效率问题的相关资料,需要的朋友可以参考下
    2021-05-05
  • 解析redis hash应用场景和常用命令

    解析redis hash应用场景和常用命令

    这篇文章主要介绍了redis hash应用场景和常用命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Redis中Scan命令的踩坑实录

    Redis中Scan命令的踩坑实录

    这篇文章主要给大家介绍了关于Redis中Scan命令踩坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • 关于Redis的主从复制及哨兵问题

    关于Redis的主从复制及哨兵问题

    redis中以master为主机,slave为从机,一个master可以对应多个slave,而一个slave只能对应一个master,这篇文章主要介绍了Redis的主从复制及哨兵,需要的朋友可以参考下
    2022-06-06
  • Redis keys命令的具体使用

    Redis keys命令的具体使用

    本文主要介绍了Redis keys命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • redistemplate下opsForHash操作示例

    redistemplate下opsForHash操作示例

    这篇文章主要为大家介绍了redistemplate下opsForHash操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • redis做websocket分布式消息推送服务的实现

    redis做websocket分布式消息推送服务的实现

    本文介绍了使用Redis作为消息队列实现WebSocket分布式消息推送服务的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12

最新评论