Springboot集成RedisTemplate使用HyperLogLog实现UV统计

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主
📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习
💒 公众号:知识浅谈
🔥 微信:zsqtcyl 联系我领取福利

🤞Springboot继承RedisTemplate使用HyperLogLog实现UV统计🤞

    • 🎈HyperLogLog使用介绍
    • 🎈HyperLogLog的工作原理
    • 🎈Redis中的HyperLogLog命令
    • 🎈使用场景
    • 🎈Springboot中实现
      • 🍮对数据进行添加
      • 🍮对上述添加的数据查看统计结果
    • 🍚总结

🎈HyperLogLog使用介绍

Redis是一个高性能的键值对数据库,它支持多种类型的数据结构,包括字符串、列表、集合、有序集合等。自Redis 2.8.9版本起,Redis引入了HyperLogLog这一数据结构,它主要用于基数估算,即估算一个集合中不同元素的数量。HyperLogLog以其极低的内存消耗和高效的估算能力,在大数据量的统计中发挥着重要作用。

HyperLogLog是一种概率数据结构,它通过统计学方法对数据进行采样和估算,以极低的内存消耗(通常只需要几千个字节)实现对大规模数据集中唯一元素的近似计数。HyperLogLog的核心思想是利用哈希函数的特性,将输入数据映射到位向量中,并观察哈希值中连续零的最长序列长度,以此来估计数据集中不同元素的数量。

🎈HyperLogLog的工作原理

HyperLogLog通过哈希函数将元素映射到一个较大的整数范围内(如64位),然后利用这个整数的二进制表示来估算基数。具体来说,HyperLogLog维护了一个固定长度的位向量,其中每个位置可以存储一个数值,表示该位置之前连续零的最长序列长度。通过不断更新这些数值,并应用一定的统计和校正算法,HyperLogLog能够估算出集合中不同元素的数量。

值得注意的是,HyperLogLog的估算结果并不是完全精确的,但其标准误差通常很低(约0.81%),在许多应用场景中是可以接受的。

🎈Redis中的HyperLogLog命令

Redis提供了三个主要的命令来操作HyperLogLog数据结构:

  • PFADD key element [element …]:将一个或多个元素添加到HyperLogLog中。如果HyperLogLog不存在,则会创建一个新的HyperLogLog。

  • PFCOUNT key [key …]:返回一个或多个HyperLogLog的估算基数。如果指定了多个HyperLogLog,Redis会计算这些HyperLogLog的并集的基数估算值。

  • PFMERGE destkey sourcekey [sourcekey …]:将一个或多个HyperLogLog合并到另一个HyperLogLog中。合并后的HyperLogLog包含了所有源HyperLogLog中的元素,但只占用一个HyperLogLog的内存空间。

🎈使用场景

HyperLogLog由于其高效的内存利用和较高的估算精度,在多个领域有着广泛的应用场景:

  • 网站UV统计:统计网站的独立访客数(UV),这是HyperLogLog最常见的应用场景之一。通过记录用户的唯一标识符(如用户ID或Cookie)并使用HyperLogLog进行估算,可以大幅减少内存消耗,同时保持较高的统计精度。

  • 数据流量分析:对数据流量中的独立元素进行统计,如分析用户在某个时间段内访问的不同页面数、点击不同广告的用户数等。

  • 数据去重:在需要去除重复数据的场景中,可以使用HyperLogLog来估算重复数据的数量,从而优化存储和计算资源的使用。

  • 数据分布估计:估计数据集的分布情况,如估计某个关键词在搜索引擎中的热度等。

🎈Springboot中实现

🍮对数据进行添加

在index0,index1,index2 三个key中记录用户访问的次数,总访问次数为10000次
 @Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test1(){for (int i = 0; i < 10000; i++) {int index = new Random().nextInt(3);int uid = new Random().nextInt(10000);redisTemplate.opsForHyperLogLog().add("index" + index,uid);}}

🍮对上述添加的数据查看统计结果

上边key用于统计访问用户的个数

    @Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test2(){for (int i = 0; i < 3; i++) {Long size = redisTemplate.opsForHyperLogLog().size("adx" + i);System.out.println("adx"+i+":"+size);}}

🍚总结

Redis中的HyperLogLog数据结构以其极低的内存消耗和高效的估算能力,在大数据量的统计中发挥着重要作用。通过掌握HyperLogLog的使用,我们可以更加高效地处理和分析大规模数据集,提升系统的性能和可扩展性。无论是网站UV统计、数据流量分析还是数据去重等场景,HyperLogLog都是一个值得推荐的选择。
大功告成,撒花致谢🎆🎇🌟,关注我不迷路,带你起飞带你富。
Writted By 知识浅谈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 大数据量处理的最佳实践

各类学习教程下载合集 ​​https://pan.quark.cn/s/874c74e8040e​​ 随着数据的快速增长&#xff0c;处理大数据量已经成为了很多企业的日常需求。SQL Server 作为一种强大的关系型数据库管理系统&#xff0c;提供了多种方法和工具来优化大数据量的处理性能。本文将介绍如何…

Ubuntu 20.04.6 安装 Elasticsearch

1.准备 -- 系统更新 sudo apt update sudo apt upgrade -- 安装vim 文本编辑器 sudo apt install vim-- jdk 版本确认 java -versionjdk 安装可以参照&#xff1a;https://blog.csdn.net/CsethCRM/article/details/140768670 2.官方下载Elasticsearch 官方地址&#xff1a;h…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

Bugku-ctf-web-eval

<?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> include "flag.php"; 这行代码尝试包含一个名为flag.php的文件。这个文件可能包含一些配置信息或其他代码&#xff0c;但是没有提供这…

2024电赛H题参考方案(+视频演示)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、移植MPU6050模块 3、移植TB6612电机驱动模块 4、整体控制方案视频演示 总结 一、题目要求 小编自认为&#xff1a;此次H题属于控制类题目&#xff0c;相较于往年较为简单&#xff0c;功能也算单一&a…

谷歌出品,一款免费的智能绘图工具

AutoDraw是由Google开发的一款基于网络的智能绘图工具&#xff0c;旨在通过人工智能技术帮助用户快速、简便地创建图画和图表。该工具于2017年4月11日由谷歌创意实验室推出&#xff0c;并迅速获得了广泛关注。 AutoDraw的核心功能是利用机器学习算法识别用户的草图或涂鸦&…

分布式SQL查询引擎之Presto

Apache Presto 是一个开源的分布式 SQL 查询引擎&#xff0c;旨在高效地对大规模数据集执行交互式查询。Presto 最初由 Facebook 开发&#xff0c;现已成为广泛使用的数据查询工具&#xff0c;特别是在大数据和分析领域。 主要特点 高性能&#xff1a;Presto 通过并行化和内存…

linux运维一天一个shell命令之 top详解

概念&#xff1a; top 命令是 Unix 和类 Unix 操作系统&#xff08;如 Linux、macOS&#xff09;中一个常用的系统监控工具&#xff0c;它提供了一个动态的实时视图&#xff0c;显示系统的整体性能信息&#xff0c;如 CPU 使用率、内存使用情况、进程列表等。 基本用法 root…

【A1web 1.0】靶机复现详解!

靶机地址&#xff1a; https://www.vulnhub.com/entry/ai-web-1,353/攻击机&#xff1a;kali 首先虚拟机建一个A1web 1.0靶机 切换nat模式 然后kali扫描 nmap -sV ip段 0/24 扫描出ip进行访问 访问没有什么信息 使用dirb 对网页…

使用 Matlab 绘制带有纹理的柱状图

以下是效果 1. 在 Matlab 里安装两个额外的库&#xff1a; hatchfill2 和 legendflex。 &#xff08;1&#xff09;搜索并安装 hatchfill2&#xff0c;用来画纹理 (2) 搜索并安装 legendflex&#xff0c;用来画自定义的图例 2. 代码&#xff08;说明见注释&#xff09; data …

排序算法辨析(快速记忆版)(冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序)保研面经

选择排序&#xff1a;摸到一叠牌&#xff0c;每次选择出最小的放在合适的位置&#xff08;第一次放在第一张&#xff0c;第二次放在第二张&#xff09;&#xff0c;实现排序 最好最坏都是 O&#xff08;n^2&#xff09; 插入排序&#xff1a;摸牌的时候一张一张摸&#xff0c;每…

每日Attention学习14——Efficient Self-Attention

模块出处 [MICCAI 22] [link] [code] Lesion-aware Dynamic Kernel for Polyp Segmentation 模块名称 Efficient Self-Attention (ESA) 模块作用 高效自注意力 模块结构 模块思想 Self Attention操作在具有优秀的长距离建模能力的同时&#xff0c;也有着较高的计算与内存成…

【DevOps工具链】DevOps工具链的基本组成与功能

DevOps工具链 DevOps工具链的基本组成与功能 目录 引言DevOps概述DevOps工具链组成 版本控制持续集成持续交付与部署配置管理监控与日志管理 典型DevOps工具介绍 GitJenkinsDockerKubernetesAnsiblePrometheus和Grafana DevOps工具链的最佳实践结论 引言 在现代软件开发中&…

缓存策略自定义:Laravel应用性能优化秘籍

缓存策略自定义&#xff1a;Laravel应用性能优化秘籍 在现代Web应用中&#xff0c;缓存是一种提高应用性能和响应速度的有效手段。Laravel框架提供了强大的缓存机制&#xff0c;支持多种缓存驱动&#xff0c;如文件、数据库、Redis等。然而&#xff0c;在某些情况下&#xff0…

Vue 3 状态管理 Pinia 详解

引言 随着 Vue 3 的推出&#xff0c;Pinia 成为了 Vue 社区中一个备受瞩目的状态管理库。它简洁而强大&#xff0c;旨在替代 Vuex&#xff0c;为开发者提供更加灵活的状态管理解决方案。本文将详细介绍 Pinia 的核心概念、安装方法、使用技巧以及如何在 Vue 3 项目中集成 Pini…

学习ruixingkafei过程

一、抓包 手机安装证书&#xff0c;开启VPN抓包&#xff0c;电脑上打开花瓶&#xff0c;在同一个局域网内抓包&#xff0c;这些老一套没什么可说的。 看看我们的抓包结果是不是很美丽&#xff0c;请求内容加密&#xff0c;返回内容也加密&#xff0c;猜测加密方式aes&#xff0…

JWT (JSON Web Token)

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

AI绘画3分钟解决英文恐惧症,comfyui汉化插件

前言 全面解析&#xff1a;Comfy UI汉化插件的安装与配置指南 本文涉及的工作流和插件&#xff0c;需要的朋友请扫描免费获取哦 引言 本文图片来源网络&#xff0c;侵权联删除。 在全球化的今天&#xff0c;软件界面的本地化是提升用户体验的重要一环。对于许多非英语母语的…

Java面试题基础

基础总结 Java Java 平台无关性 主要通过三个方面实现. Java 语言规范&#xff1a; 通过规定 Java 语言中基本数据类型的取值范围和行为&#xff0c;比如 int 长度为 4 字节&#xff0c;这是固定的。Class 文件&#xff1a; 所有 Java 文件要通过 javac 或者其他一些 java 编…

EasyExcel入门

目录 一、文章简介 二、概念 1.EasyExcel是什么&#xff1f; 2.EasyExcel 能用在哪里&#xff1f; 3.为什么要选用EasyExcel解析excel&#xff1f; 4.如何使用EasyExcel&#xff1f; 三、EasyExcel快速入门 1.环境搭建 2.简单写excel 代码示例 TestFileUtil Employe…