4 redis的HyperLogLog入门&原理

一、HyperLogLog(字符串类型)

需求:大型网站(不在大厂基本上用不到) 每个网页每天的 UV 数据(独立访客),统计如何实现?(尽量少的占用存储空间)

  1. Redis 提供了 HyperLogLog 数据结构就是用来解决这种统计问题的。
  2. HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确,标准误差是 0.81%,这样的精确度已经可以满足上面的 UV统计需求了。

HyperLogLog提供了3个命令: pfadd、pfcount、pfmerge

1、百万级用户访问网站,单个页面的统计差异
2、Pfadd

Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中

基本语法如下:

java 复制代码
redis 127.0.0.1:6379> PFADD key element [element ...]

返回值:

整型,如果至少有个元素被添加返回 1, 否则返回 0。

例如:统计2023-10-10的用户登录数量

java 复制代码
redis 127.0.0.1:6379> PFADD login:2023-10-10 p001 p002 p003 p004 p005 p006 
(integer) 1
redis 127.0.0.1:6379> PFCOUNT login:2023-10-10
(integer) 6
3、Pgmerge

Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog。

合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。

java 复制代码
redis 127.0.0.1:6379> PFADD hll1 foo bar zap a
(integer) 1
redis 127.0.0.1:6379> PFADD hll2 a b c foo
(integer) 1
redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2
OK
redis 127.0.0.1:6379> PFCOUNT hll3		//取并集,且去重
(integer) 6
相关推荐
Rain的Java大神之路9 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
十二同学啊9 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
Wang's Blog10 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog10 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
蓝速科技10 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Together_CZ10 小时前
DeepSeek-V4.1-Flash:Pushing the Limits of KV Cache Compression——推动 KV 缓存压缩的极限
缓存·llm·compression·kv cache·deepseek·v4.1-flash·推动 kv 缓存压缩的极限
一 乐13 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB13 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶13 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax13 小时前
MongoDB 索引与事务
java·数据库·mongodb