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

【黑马点评学习笔记 | 实战篇 】| 10-用户签到+UV统计

Bug如山勤为径代码似海苦作舟。友友们好这里是苦瓜大王。今天学习的是黑马点评项目实战篇——用户签到UV统计部分的学习。学完这一部分主播会暂时将后面的高级篇和原理篇搁置后面有时间了再学习。本节笔记如下后续会一直更新黑马点评学习过程中的笔记、问题等请多多支持哦文章目录一、用户签到1.BitMap基本命令2.实现签到功能3.统计连续签到二、UV统计1.HyperLogLog的用法2.实现UV统计一、用户签到使用位图进行签到统计1.BitMap基本命令示例11100111u指转成无符号数i指转为有符号数2.实现签到功能UserController/** * 签到功能 */PostMapping(/sign)publicResultsign(){returnuserService.sign();}UserServiceImpl/** * 签到功能 * return */publicResultsign(){// 1.获取当前登录用户LonguserIdUserHolder.getUser().getId();// 2.获取日期LocalDateTimenowLocalDateTime.now();// 3.拼接keyStringkeySuffixnow.format(DateTimeFormatter.ofPattern(:yyyyMM));StringkeyUSER_SIGN_KEYuserIdkeySuffix;// 4.获取今天是本月的第几天intdayOfMonthnow.getDayOfMonth();// 5.写入Redis SETBIT key offset 1stringRedisTemplate.opsForValue().setBit(key,dayOfMonth-1,true);returnResult.ok();}前端没有做这个功能所以用ApiFox测试http://localhost:8080/api/user/signPOST记得带上令牌哦然后查看Redis里是否在你当前日期签到了3.统计连续签到实现签到统计用1做与运算就能得到最后一个比特位UserController/** * 统计连续签到 */GetMapping(/sign/count)publicResultsignCount(){returnuserService.signCount();}UserServiceImpl/** * 统计连续签到 */publicResultsignCount(){// 1.获取当前登录用户LonguserIdUserHolder.getUser().getId();// 2.获取日期LocalDateTimenowLocalDateTime.now();// 3.拼接keyStringkeySuffixnow.format(DateTimeFormatter.ofPattern(:yyyyMM));StringkeyUSER_SIGN_KEYuserIdkeySuffix;// 4.获取今天是本月的第几天intdayOfMonthnow.getDayOfMonth();// 5.获取本月截止今天为止的所有的签到记录返回的是一个十进制的数字 BITFIELD sign:5:202203 GET u14 0 ListLong result stringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if(resultnull||result.isEmpty()){// 没有任何签到结果returnResult.ok(0);}Longnumresult.get(0);if(numnull||num0){returnResult.ok(0);}// 6.循环遍历intcount0;while(true){// 6.1.让这个数字与1做与运算得到数字的最后一个bit位 // 判断这个bit位是否为0if((num1)0){// 如果为0说明未签到结束break;}else{// 如果不为0说明已签到计数器1count;}// 把数字右移一位抛弃最后一个bit位继续下一个bit位num1;}returnResult.ok(count);}二、UV统计1.HyperLogLog的用法所以引入了HLL不仅操作简单而且占内存小而且HLL不会计算重复的数据2.实现UV统计通过info memory查看当前redis占用内存前后进行对比我们会发生他的误差是在允许范围内并且内存占用极小TestvoidtestHyperLogLog(){// 准备数组,装用户数据String[]usersnewString[1000];// 数组角标intindex0;for(inti1;i1000000;i){// 赋值users[index]user_i;// 每1000条发送一次if(i%10000){index0;stringRedisTemplate.opsForHyperLogLog().add(hll1,users);// 统计数量LongsizestringRedisTemplate.opsForHyperLogLog().size(hll1);System.out.println(size size);}}}以上就是黑马点评实战篇——用户签到UV统计部分的学习笔记仅供参考多多支持主播对于黑马点评部分的学习会暂时告一段落因为后面的部分对于校招找工作来说暂时有点深奥用不上所以一般的路线不会再继续学下去了但是主播后续一定会捡起来重新学习 。接下来我应该会找一个项目做做同样也会在CSDN上持续更新友友们可以先点赞关注后续会有其他的Java后端内容发布哦

相关文章:

【黑马点评学习笔记 | 实战篇 】| 10-用户签到+UV统计

Bug如山勤为径,代码似海苦作舟。友友们好,这里是苦瓜大王。今天学习的是黑马点评项目实战篇——用户签到UV统计部分的学习。学完这一部分,主播会暂时将后面的高级篇和原理篇搁置,后面有时间了再学习。本节笔记如下,后续…...

计算机毕业设计springboot基于Web的英语学习网站的设计与实现 基于SpringBoot框架的在线英语教育平台构建 采用B/S架构的智能化英语学习管理系统开发

计算机毕业设计springboot基于Web的英语学习网站的设计与实现(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在全球化进程不断深化的当下,英语作为国际通用语言的地位…...

Unity游戏开发:UniTask异步任务取消的3种实战技巧(附WhenAny/WhenAll示例)

Unity游戏开发:UniTask异步任务取消的3种实战技巧(附WhenAny/WhenAll示例) 在Unity游戏开发中,异步编程已经成为提升性能与用户体验的核心技术。而UniTask作为Unity生态中最受欢迎的异步解决方案之一,其强大的任务管理…...

## 22|Python gRPC 微服务治理:超时、重试与接口兼容策略

22|Python gRPC 微服务治理:超时、重试与接口兼容策略 文章目录 22|Python gRPC 微服务治理:超时、重试与接口兼容策略 摘要 SEO 摘要 目录 gRPC 线上常见故障 治理策略 Python 代码示意 案例复盘 案例复盘二 架构权衡对比表(A/B/C) 可执行实验步骤 发布后7天观察指标模板…...

计算机毕业设计springboot任我行——旅游推荐系统的开发 基于SpringBoot的“智游云“——个性化旅游行程规划系统 基于协同过滤算法的“旅途通“——智慧旅游服务平台设计与实现

计算机毕业设计springboot任我行——旅游推荐系统的开发407g1l6t (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在互联网与移动设备全面普及的今天,旅游业正经历着前…...

ESP32S3玩转AI模型:手把手教你用TensorFlow Lite Micro实现100ms内推理(含量化实战)

ESP32S3实战:从零部署量化AI模型到100ms推理全流程解析 1. 为什么选择ESP32S3运行AI模型? 当我们在讨论边缘计算时,ESP32S3这颗双核Xtensa LX7处理器正成为嵌入式AI开发者的新宠。相较于传统MCU,它具备以下独特优势: 硬…...

显微镜图像配准避坑指南:为什么你的亚像素算法总失效?

显微镜图像配准避坑指南:为什么你的亚像素算法总失效? 在生物医学研究中,显微镜图像的精确配准是许多关键分析的基础。无论是追踪细胞迁移、分析组织切片,还是对齐电镜图像,亚像素级配准都扮演着重要角色。然而&#x…...

RMBG-2.0一文详解:从模型结构、推理流程到WebUI交互逻辑全梳理

RMBG-2.0一文详解:从模型结构、推理流程到WebUI交互逻辑全梳理 1. 背景去除新选择:为什么RMBG-2.0值得关注 在图像处理领域,背景去除一直是个高频需求。无论是电商商品图处理、证件照制作,还是短视频内容创作,都需要…...

Leather Dress Collection 快速上手:10分钟完成镜像拉取与首次推理

Leather Dress Collection 快速上手:10分钟完成镜像拉取与首次推理 你是不是也对AI绘画感兴趣,但被复杂的本地部署、环境配置劝退了?想试试那些能生成惊艳图片的模型,却不知道从何下手? 今天,我就带你体验…...

5分钟搞定OpenCV图像拼接:从预处理到融合的完整流程(附Python代码)

5分钟搞定OpenCV图像拼接:从预处理到融合的完整流程(附Python代码) 当你手头有两张部分重叠的风景照片,或是需要将多张显微镜下的细胞图像拼接成完整视图时,图像拼接技术就能大显身手。作为计算机视觉领域的经典问题&a…...

Qwen3-Reranker-0.6B开源大模型部署:无需Docker的纯Python轻量方案

Qwen3-Reranker-0.6B开源大模型部署:无需Docker的纯Python轻量方案 1. 项目概述 Qwen3-Reranker-0.6B是一个基于深度语义理解的检索重排序工具,专门用于提升RAG系统的检索精度。这个方案最大的特点是完全基于Python实现,无需复杂的Docker环…...

OpenHarmony Flutter 应用构建与分发进阶:自动化流水线与多场景适配策略

1. 从手动打包到自动化流水线的必要性 第一次手动打包OpenHarmony Flutter应用时,我花了整整两天时间才搞定签名配置和华为应用市场上架。每次版本更新都要重复执行十几项操作,不仅效率低下,还容易因为人为失误导致打包失败。这种经历让我意识…...

DisplayPort链路训练实战:深入解析时钟恢复(CR)的挑战与调优

1. DisplayPort链路训练与时钟恢复的核心挑战 刚接触DisplayPort调试的工程师常会遇到一个诡异现象:明明按照协议文档一步步操作,时钟恢复(CR)阶段却频繁失败。这就像新手厨师照着米其林菜谱做菜,结果连火都点不着——问题往往出在"理想…...

ccmusic-database代码实例:自定义修改MODEL_PATH切换不同流派分类模型

ccmusic-database代码实例:自定义修改MODEL_PATH切换不同流派分类模型 1. 引言 你有没有想过,让AI来当你的私人音乐DJ,自动识别你播放列表里每首歌的风格?无论是激昂的交响乐,还是慵懒的爵士,它都能瞬间告…...

【源码解析】DolphinScheduler动态传参核心机制:从VarPool到下游Task的数据流转

1. 揭开DolphinScheduler动态传参的神秘面纱 第一次接触DolphinScheduler的任务传参功能时,我完全被各种参数传递方式搞晕了。官方文档里介绍的静态传参很好理解,就是在界面上提前配置好参数名和值。但实际开发中,我们经常遇到这样的场景&…...

C++调用李慕婉-仙逆-造相Z-Turbo API实战指南

C调用李慕婉-仙逆-造相Z-Turbo API实战指南 1. 开篇:为什么选择C调用AI模型? 如果你是一名C开发者,想要在自己的应用中集成AI图像生成能力,特别是生成《仙逆》风格的角色图像,那么这篇指南就是为你准备的。李慕婉-仙…...

“黑马点评”项目升级:集成StructBERT实现评论情感与相似度分析

“黑马点评”项目升级:集成StructBERT实现评论情感与相似度分析 不知道你有没有这样的经历?打开一个点评类应用的后台,面对成千上万条用户评论,感觉就像面对一片信息的海洋。哪些是好评,哪些是吐槽?用户们…...

MogFace人脸检测模型-large在电商场景的应用:自动识别模特人脸

MogFace人脸检测模型-large在电商场景的应用:自动识别模特人脸 1. 电商场景中的人脸检测需求 1.1 电商平台面临的挑战 在电商运营中,商品主图的质量直接影响转化率。每天需要处理大量包含模特展示的商品图片,传统人工审核和标注方式面临三…...

QML Canvas实战:从零构建可定制化仪表盘组件

1. QML Canvas基础与仪表盘设计思路 第一次接触QML Canvas时,我完全被它的灵活性震撼到了。相比传统的静态图片控件,Canvas就像一块数字画布,让我们可以用代码"画"出任何想要的界面元素。对于仪表盘这种需要高度定制化的组件来说&a…...

避坑指南:STM32LL库PWM模式2配置的那些坑(附TIM3通道3完整代码)

STM32LL库PWM模式2深度配置实战:从异常波形到精准控制 在嵌入式开发领域,STM32系列微控制器因其出色的性能和丰富的外设资源广受欢迎。其中,定时器的PWM功能在电机控制、LED调光等场景中扮演着关键角色。然而,许多中高级开发者在采…...

Electron开发中终端乱码的六种根治方案:从临时修复到环境配置

1. 临时修改终端编码:快速救火方案 第一次在Windows上调试Electron项目时,看到控制台输出的中文变成一堆问号和乱码,我差点以为自己的代码被外星人劫持了。后来才发现这是Windows终端默认使用GBK编码(代码页936)&#…...

UVM寄存器模型实战:5种内建sequence的避坑指南与最佳实践

UVM寄存器模型实战:5种内建sequence的避坑指南与最佳实践 在芯片验证领域,UVM寄存器模型是构建高效验证环境的核心组件之一。作为验证工程师,我们经常需要验证寄存器功能的正确性,而UVM提供的多种内建sequence正是为此而生。本文将…...

Qwen2多语言开发避坑手册:30种语言支持下的API调用最佳实践

Qwen2多语言开发避坑手册:30种语言支持下的API调用最佳实践 跨国业务开发者在处理多语言场景时,常常面临字符编码混乱、语言检测不准、API响应不稳定等痛点。本文将深入解析Qwen2多语言API的实战技巧,覆盖从基础调用到高级优化的全流程&#…...

【WSL2+Ubuntu+Docker Desktop】从C盘到D盘:高效迁移与空间优化实战

1. 为什么需要迁移WSL2和Docker到D盘? 很多开发者刚开始使用WSL2和Docker时,都会遇到一个头疼的问题:C盘空间莫名其妙就被占满了。我自己就吃过这个亏,当时C盘突然爆红,一查才发现WSL2和Docker的虚拟机文件已经占用了5…...

【嵌入式开发】SecureCRT串口日志监听实战:从配置到故障排查

1. SecureCRT串口监听入门指南 第一次接触嵌入式开发的朋友,看到SecureCRT这个工具可能会有点懵。其实它就像是我们和硬件设备对话的"翻译官",把设备输出的串口信号转换成我们能看懂的文字信息。我刚开始用的时候也踩过不少坑,比如…...

Kylin V10离线部署Ceph集群全攻略:从环境准备到故障排查

Kylin V10环境下Ceph集群离线部署实战指南 1. 离线部署Ceph集群的核心挑战与解决方案 在封闭网络环境中部署Ceph分布式存储系统,运维工程师面临三大核心挑战: 依赖隔离:传统在线部署依赖互联网获取软件包和容器镜像环境适配:国产操…...

从痛点到解决方案:特殊字符输入器如何提升自媒体创作效率

对于从事图文自媒体工作的人来说,内容创作是我们工作的核心,也是我们与读者沟通的桥梁。 每一篇文章的诞生,都需要经过选题、构思、撰写、排版等多个环节,凝聚着我们的心血和创意。 在这个过程中,任何能够提升效率、减…...

从暴力匹配到KMP:一个算法小白的逆袭之路(含常见误区解析)

从暴力匹配到KMP:一个算法小白的逆袭之路(含常见误区解析) 第一次听说KMP算法时,我正坐在大学图书馆里啃着《数据结构与算法》的教材。那是一个阳光刺眼的下午,我盯着"字符串匹配"这一章,反复读着…...

特殊字符输入器:图文自媒体工作者的高效输入工具深度解析

在当今数字时代,图文类自媒体已经成为内容创作的重要形式。 作为一名图文自媒体工作者,我们每天都需要撰写大量的文章内容,与读者分享我们的观点和见解。 在这个过程中,我们经常会遇到需要输入各种特殊字符的情况,比如…...

为什么你的浮点数计算总是不准?揭秘Float类型的7位有效数字陷阱

为什么你的浮点数计算总是不准?揭秘Float类型的7位有效数字陷阱 1. 浮点数精度问题的真实案例 想象一下这样的场景:你在开发一个电商平台的购物车功能,用户将三件单价为3.33元的商品加入购物车,系统显示总价为9.99元。但当用户使用…...