使用Redis实现签到功能:Java示例解析

news/2024/9/14 2:01:01/ 标签: java, 开发语言, redis, 数据库, 缓存

使用Redis实现签到功能:Java示例解析

在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()signCount(),分别用于用户签到和计算用户当月的签到次数。

1. 签到方法:sign()

首先,让我们看看sign()方法:

java">@Override
public Result sign() {// 1.获取当前登录用户Long userId = UserHolder.getUser().getId();// 2.获取日期LocalDateTime now = LocalDateTime.now();// 3.拼接keyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;// 4.获取今天是本月第几天int dayOfMonth = now.getDayOfMonth();// 5.写入Redis SETBIT key offset 1stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);return Result.ok();
}
2. 计算签到次数方法:signCount()

接下来是signCount()方法:

java">@Override
public Result signCount() {// 1.获取当前登录用户Long userId = UserHolder.getUser().getId();// 2.获取日期LocalDateTime now = LocalDateTime.now();// 3.拼接keyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;// 4.获取今天是本月第几天int dayOfMonth = now.getDayOfMonth();// 5.获取本月截止到今天的签到次数List<Long> result = stringRedisTemplate.opsForValue().bitField(key, BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if (result == null || result.isEmpty()) {return Result.ok(0);}Long num = result.get(0);if (num == null || num == 0) {return Result.ok(0);}// 6.循环遍历int count = 0;while (true) {if ((num & 1) == 0) {break;} else {count++;}num >>>= 1;}return Result.ok(count);
}
总结

通过以上两个方法,我们可以实现用户的签到和签到次数的计算。使用Redis的位操作,可以高效地存储和处理签到记录。这种方法不仅节省了存储空间,还提高了操作的效率,非常适合在高并发的应用场景中使用。


http://www.ppmy.cn/news/1475796.html

相关文章

3d为什么删掉模型不能返回?---模大狮模型网

在展览3D模型设计行业中&#xff0c;设计师们经常面临一个关键问题&#xff1a;一旦删除了模型的某些部分&#xff0c;为什么很难或者无法恢复原始状态?这不仅是技术上的挑战&#xff0c;更是设计过程中需要深思熟虑的重要考量。本文将探讨这一问题的原因及其在实际工作中的影…

【图解大数据技术】Spark

【图解大数据技术】Spark Spark简介RDDSpark示例Spark运行原理整体流程DAG 与 stage 为什么Spark比MapReduce快&#xff1f; Spark简介 Spark与MapReduce一样&#xff0c;也是大数据计算框架。Spark相比MapReduce拥有更快的执行速度和更低的编程复杂度。 Spark包括以下几个模…

AI算法17-贝叶斯岭回归算法Bayesian Ridge Regression | BRR

贝叶斯岭回归算法简介 贝叶斯岭回归&#xff08;Bayesian Ridge Regression&#xff09;是一种回归分析方法&#xff0c;它结合了岭回归&#xff08;Ridge Regression&#xff09;的正则化特性和贝叶斯统计的推断能力。这种方法在处理具有大量特征的数据集时特别有用&#xff…

搜索引擎中的相关性模型

一、什么是相关性模型&#xff1f; 相关性模型主要关注的是query和doc的相关性。例如给定query&#xff0c;和1000个doc&#xff0c;找到哪个doc是好query最相关的。 二、为什么需要相关性模型&#xff1f; 熟悉es的应该都熟悉BM25相关性算法。它是一个很简单的相关性算法。我…

Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制

章节内容 上节我们完成了&#xff1a; ZooKeeper 集群配置ZooKeeper 集群启动ZooKeeper 集群状况查看Follower 和 Leader 节点 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭…

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网&#xff1a;https://goharbor.io/ 点击 Download now 链接&#xff0c;会自动跳转到上述github页面&am…

多旋翼+VR眼镜:10寸FPV穿越机技术详解

FPV&#xff08;First Person View&#xff09;穿越机&#xff0c;是指通过第一人称视角来驾驶的无人机&#xff0c;特别强调速度和灵活性&#xff0c;常常用于竞赛、航拍和探索等领域。结合多旋翼设计和VR眼镜&#xff0c;FPV穿越机为用户提供了身临其境的飞行体验。 多旋翼技…

Android人脸解锁源码解析

1 人脸解锁相关类介绍 FaceManager FaceManager是一个私有接口&#xff0c;用于维护FaceService的之间连接。Keyguard通过该接口访问具有自定义界面的人脸识别身份验证硬件。应用无权访问FaceManager&#xff0c;必须改为使用BiometricPrompt。 FaceService 该框架实现用于管…

vscode连接到WSL子系统报错/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: not found

子系统单独启动没有问题&#xff0c;vscode启动wsl子系统报错 报错如下&#xff1a; /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/bin/code-server: 12: /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: n…

git github gitee 三者关系

Git&#xff1a; Git 是一个分布式版本控制系统&#xff0c;用于跟踪源代码的更改。它由 Linus Torvalds 于 2005 年开发&#xff0c;目的是更好地管理 Linux 内核开发。Git 是一个命令行工具&#xff0c;具有以下特点&#xff1a; 分布式&#xff1a;每个开发者的工作目录都是…

B树:深入解析与实战应用

在数据结构和算法的世界中&#xff0c;B树&#xff08;B-tree&#xff09;无疑是一颗璀璨的明星。它不仅广泛应用于数据库和文件系统的索引结构中&#xff0c;而且在许多需要高效数据检索的场景中发挥着重要作用。本文将从B树的基本概念入手&#xff0c;通过图文结合的方式&…

海外媒体宣发:尼日利亚媒体通稿报道发布-大舍传媒

尼日利亚媒体概述 尼日利亚&#xff0c;作为非洲人口最多的国家&#xff0c;拥有多元化的媒体环境。在这个国家&#xff0c;你可以找到各种类型的媒体&#xff0c;包括传统媒体和新媒体。传统媒体主要包括报纸、电视和广播&#xff0c;而新媒体则主要是互联网和社交媒体。 尼…

Java+springboot+vue智慧班牌小程序源码,智慧班牌系统可以提供哪些服务?

智慧班牌全套源码&#xff0c;系统技术架构&#xff1a;Javaspringbootvue element-ui小程序电子班牌&#xff1a;Java Android演示正版授权。 智慧班牌在智慧校园的数字化建设中提供了多种服务&#xff0c;这些服务不仅丰富了校园的信息展示方式&#xff0c;还促进了家校互动…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日&#xff0c;我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接 我当时快速看了一遍&#x…

ASP.NET MVC-制作可排序的表格组件-PagedList版

环境&#xff1a; win10 参考&#xff1a; 学习ASP.NET MVC(十一)——分页 - DotNet菜园 - 博客园 https://www.cnblogs.com/chillsrc/p/6554697.html ASP.NET MVCEF框架实现分页_ef 异步分页-CSDN博客 https://blog.csdn.net/qq_40052237/article/details/106599528 本文略去…

ATE电源芯片测试方案之效率曲线评估芯片性能

在电子产品的设计中&#xff0c;电源管理芯片的效率优化是提升能效和延长使用寿命的关键。因此&#xff0c;探究电源管理芯片在不同工作条件下的效率变化&#xff0c;并通过效率曲线进行可视化表达&#xff0c;对于电源管理技术的进步至关重要。 电源管理芯片的效率曲线 鉴于电…

【C++深入学习】类和对象(一)

欢迎来到HarperLee的学习笔记&#xff01; 博主主页传送门&#xff1a;HarperLee博客主页&#xff01; 欢迎各位大佬交流学习&#xff01; 本篇本章正式进入C的类和对象部分&#xff0c;本部分知识分为三小节。复习&#xff1a; 结构体复习–内存对齐编译和链接函数栈桢的创建…

OpenCV solvePnP位姿估计

目录 一、概述 二、实现代码 2.1solvePnP函数 2.1.1输入参数 2.1.2输出参数 2.2完整代码 三、实现效果 3.1标定板位姿 3.2标定板到相机的变换矩阵 一、概述 完成相机标定后&#xff0c;可以通过检测标定板在图像中的位置来计算标定板在相机坐标系下的位姿&#xff08;…

vue 项目代码架构

Vue项目的代码架构通常遵循一定的组织结构和约定&#xff0c;以提高项目的可维护性、可扩展性和可读性。以下是对Vue项目代码架构的详细解析&#xff1a; 一、项目目录结构 Vue项目的目录结构通常包括以下几个关键部分&#xff1a; 根目录&#xff1a; package.json&#x…

如何使用这个XMLHttpRequest?

ajax含义:async javascript and XML;是异步的JS和XML&#xff1b;是实现页面局部刷新的技术(是一门独立的技术)。 为什么在js内能够使用呢&#xff1f;是因为ajax在浏览器内内置了一个核心对象&#xff0c;--》XMLHttpRequest&#xff08;低版本的IE浏览器没有&#xff09; 步…