当前位置: 首页 > news >正文

Redis 数据类型HyperLogLogs(基数统计)

目录

1 基本特性

2 主要操作命令 

2.1 PFADD key element [element ...]

2.2 PFCOUNT key [key ...]

2.3 PFMERGE destkey sourcekey [sourcekey ...]

3 使用场景


HyperLogLog 是 Redis 提供的一种用于基数估计(cardinality estimation)的数据结构。它被设计用来高效地计算一个集合中不重复元素的数量,也就是基数。在处理大规模数据时,直接存储所有元素并计算唯一性可能会消耗大量的内存,而 HyperLogLog 可以使用非常少的内存来估算这个值,并且具有较高的准确性。Redis 的 HyperLogLog 并不是一种独立的数据类型,而是基于字符串(String)数据类型的一种特殊用法。

1 基本特性

  • 低内存占用:即使要统计数亿甚至数十亿条记录的基数,HyperLogLog 也只需要大约 12 KB 的内存。
  • 固定空间大小:无论你添加多少个元素到 HyperLogLog 中,它所占用的空间都是固定的。
  • 可合并性:多个 HyperLogLog 可以合并成一个新的 HyperLogLog,这使得它可以用于分布式环境中的基数估计。
  • 概率算法:由于是基于概率的估算,所以结果不是精确的,但通常误差范围可以控制在可接受的范围内(标准误差大约为 0.81%)。

2 主要操作命令 

2.1 PFADD key element [element ...]

向 HyperLogLog 添加一个或多个元素,返回值是 1 表示至少有一个元素被添加到 HyperLogLog 中,0 表示没有新元素被添加。

127.0.0.1:6379> pfadd name java
(integer) 1
2.2 PFCOUNT key [key ...]

返回 HyperLogLog 的近似基数。如果提供了多个键,则会先将这些 HyperLogLog 合并再进行计数,如果提供了多个键,那么返回的是这些 HyperLogLog 的并集的基数估计值。

127.0.0.1:6379> pfadd name java
(integer) 1
127.0.0.1:6379> pfadd name c++ go
(integer) 1
127.0.0.1:6379> pfcount name
(integer) 3
127.0.0.1:6379> pfadd name1 python .net
(integer) 1
127.0.0.1:6379> pfcount name name1
(integer) 5

添加重复元素例子:

127.0.0.1:6379> pfadd name java go c++ java python java
(integer) 1
127.0.0.1:6379> pfcount name
(integer) 4
2.3 PFMERGE destkey sourcekey [sourcekey ...]

将一个或多个 HyperLogLog 合并到指定的目的键中,合并后的 HyperLogLog 包含所有源 HyperLogLog 中的元素。

127.0.0.1:6379> pfadd name java go c++
(integer) 1
127.0.0.1:6379> pfadd name1 python .net
(integer) 1
127.0.0.1:6379> pfmerge name2 name name1
OK
127.0.0.1:6379> pfcount name2
(integer) 5

3 使用场景

  • 网站独立访客数:统计每天访问网站的不同用户数量。
  • 广告点击分析:统计某个广告被不同用户点击的次数。
  • 日志分析:统计日志文件中不同 IP 地址的数量。
  • 实时数据分析:在流式数据处理中,快速估算唯一值的数量。

http://www.mrgr.cn/news/51111.html

相关文章:

  • Centos7安装ZLMediaKit
  • 物联网安全新挑战:等保测评在智能设备中的应用
  • 掌握Go语言`runtime`包:性能优化与实战指南
  • Python知识点:基于Python技术,如何使用PyCryptodome进行加密操作
  • 【QAMISRA】解决导入commands.json时报错问题
  • 安装Docker、切换镜像源以及拉取镜像示例
  • Java基础:面向对象编程6
  • Python连接Oracle
  • 前端常用的库有哪些?
  • 单片机(学习)2024.10.15
  • 2024.10 学习笔记
  • 机器学习(MachineLearning)(8)——模型评估与优化
  • ES6新增promise(异步编程新解决方案)如何封装ajax?
  • Springboot开发——IDEA高版本中如何创建JDK8的项目
  • 2024年10月16日历史上的今天大事件早读
  • 嵌入式SoPC最全面试题及参考答案
  • 跨域问题和前端攻击
  • 《Windows PE》6.4.1 无 DLL远程注入
  • 网页前端开发之HTML入门
  • 大商创(移动端) -- day02