Redis中BitMap实现签到与统计连续签到功能

news2024/10/6 12:55:25

服务层代码
//签到
    @Override
    public Result sign() {
        //1.获取当前登录的用户
        Long userId = UserHolder.getUser().getId();
        //获取日期
        LocalDateTime now = LocalDateTime.now();
        //拼接key
        String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
        String key = USER_SIGN_KEY + userId + keySuffix;
        //获取今天是本月的第几天
        int dayOfMonth = now.getDayOfMonth();
        //写入Redis SETBIT key offset 1
        stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);
        return Result.ok();
    }
    //统计连续签到
    @Override
    public Result signCount() {
        //1.获取当前登录的用户
        Long userId = UserHolder.getUser().getId();
        //获取日期
        LocalDateTime now = LocalDateTime.now();
        //拼接key
        String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
        String key = USER_SIGN_KEY + userId + keySuffix;
        //获取今天是本月的第几天
        int dayOfMonth = now.getDayOfMonth();
        //获取本月截止今天为止的所有签到记录,返回的是一个十进制的数字  BITFIELD sign:5:202409 GET u14 0  14为要查多少位即当月为几号  0为从1号开始查
        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);
        }
        //循环遍历
        int count = 0;
        while(true){
            //让这个数据与1作与运算,得到数字的最后一个bit位   判断这个bit位是否为0
            if((num & 1) == 0){
                //如果为0,说明未签到,结束
                break;
            } else {
                //如果为1,说明已签到,计数器加1
                count++;
            }
            num >>>= 1;
        }
        return Result.ok(count);
    }

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

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

相关文章

网页打不开、找不到服务器IP地址

现象&#xff1a;网络连接ok&#xff0c;软件能正常使用&#xff0c;当网页打不开。 原因&#xff1a;DNS 配置错误导致网站域名无法正确解析造成。 影响DNS设置的&#xff1a;VPN软件、浏览器DNS服务选择、IPv4属性被修改。 1、VPN代理未关闭 2、浏览器DNS解析选择 3、以太…

华为eNSP:端口隔离

一&#xff0c;什么是端口隔离 端口隔离是一种网络配置技术&#xff0c;用于将不同的网络设备或用户隔离在不同的虚拟局域网&#xff08;VLAN&#xff09;中&#xff0c;以实现网络流量的隔离和安全性提升。通过在交换机或路由器上配置端口隔离&#xff0c;可以将连接到同一设…

原来大模型训练实战,是需要这些项目!!

去年侧重大模型和GPT的原理&#xff0c;今年就侧重项目实战了。找到的这个合集不仅收集了大模型训练实战&#xff0c;还有微调实战&#xff0c;分布式训练&#xff0c;真的很全。 下面汇总了我在大模型实践中训练相关的所有教程。从6B到65B&#xff0c;从全量微调到高效微调(L…

【AIGC】2021-arXiv-LoRA:大型语言模型的低秩自适应

2021-arXiv-LoRA: Low-Rank Adaptation of Large Language Models LoRA&#xff1a;大型语言模型的低秩自适应摘要1. 引言2. 问题陈述3. 现有的解决方案还不够好吗&#xff1f;4. 我们的方法4.1 低秩参数化更新矩阵4.2 将 LORA 应用于 Transformer 5. 实证实验5.1 基线5.2 ROBE…

常用组件详解(十):保存与加载模型、检查点机制的使用

文章目录 1.保存、加载模型2.torch.nn.Module.state_dict()2.1基本使用2.2保存和加载状态字典 3.创建Checkpoint3.1基本使用3.2完整案例 1.保存、加载模型 torch.save()用于保存一个序列化对象到磁盘上&#xff0c;该序列化对象可以是任何类型的对象&#xff0c;包括模型、张量…

C++基础(10)——初识vector

目录 1.vector 2.vector的使用 2.1vector的定义 2.2vector迭代器的使用 2.2.1begin和end 2.2.2rbegin和rend 2.3增删查改 2.3.1pop_back和push_back 2.3.2inset和erase 2.3.3find函数 2.3.4swap函数 2.3.5元素访问 2.4空间函数 2.4.1size和capacity 2.4.2reserv…

用HTML5+CSS+JavaScript庆祝国庆

用HTML5CSSJavaScript庆祝国庆 中华人民共和国的国庆日是每年的10月1日。 1949年10月1日&#xff0c;中华人民共和国中央人民政府成立&#xff0c;在首都北京天安门广场举行了开国大典&#xff0c;中央人民政府主席毛泽东庄严宣告中华人民共和国成立&#xff0c;并亲手升起了…

茴香豆 + Qwen-7B-Chat-Int8

今天 打开config.ini 发现 茴香豆 支持 qwen/qwen-7b-chat-int8 1.0 拉取qwen/qwen-7b-chat-int8 cd /root/modelsgit clone https://gitee.com/hf-models/Qwen-7B-Chat-Int8.git 1.1 更改配置文件 茴香豆的所有功能开启和模型切换都可以通过 config.ini 文件进行修改 /roo…

【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统

本文项目编号 T 068 &#xff0c;文末自助获取源码 \color{red}{T068&#xff0c;文末自助获取源码} T068&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 顾…

Leetcode—200. 岛屿数量【中等】

2024每日刷题&#xff08;176&#xff09; Leetcode—200. 岛屿数量 C实现代码 class Solution { public:int numIslands(vector<vector<char>>& grid) {int m grid.size();int n grid[0].size();int ans 0;function<void(int, int)> dfs [&](…

企业架构TOGAF的理论指南:数字化转型中的企业架构实践

在当今全球市场的快速变革中&#xff0c;企业的数字化转型已经成为不可避免的趋势。无论是为了提高效率、增强竞争力&#xff0c;还是为了应对技术变革的挑战&#xff0c;企业都需要一个强有力的架构框架来指导其转型。TOGAF&#xff08;The Open Group Architecture Framework…

pytorch版本和cuda版本不匹配问题

文章目录 &#x1f315;问题&#xff1a;Python11.8安装pytorch11.3失败&#x1f315;CUDA版本和pytorch版本的关系&#x1f315;安装Pytorch2.0.0&#x1f319;pip方法&#x1f319;cuda方法 &#x1f315;问题&#xff1a;Python11.8安装pytorch11.3失败 &#x1f315;CUDA版…

【CSS Tricks】试试新思路去处理文本超出情况

目录 引言一、常规套路1. 单行文本省略2. 多行文本省略 二、新思路美化一下1. 单行/多行文本隐藏2. 看下效果 三、总结 引言 本篇为css的一个小技巧 文本溢出问题是一个较为常见的场景。UI设计稿为了整体的美观度会将文本内容限制到一定范围内&#xff0c;然而UI设计阶段并不能…

智慧学生宿舍管理平台|学生宿舍管理平台系统|基于Springboot+VUE的智慧学生宿舍管理平台系统设计与实现(源码+数据库+文档)

智慧学生宿舍管理平台 目录 基于SpringbootVUE的智慧学生宿舍管理平台系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕…

余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新

华为余承东:激光雷达,智能驾驶安全性的关键 9月29日,华为消费者业务集团CEO余承东在一场引人注目的直播中,与知名主持人马东就智能驾驶技术的最新进展进行了深入交流。在这场直播中,余承东针对激光雷达在智能驾驶中的必要性问题,发表了明确且深刻的观点,引发了业界和公众…

STM32F407 HAL库定时器触发ADC采集与DMA数据传输(定时器TIM+ADC+DMA)

在STM32F407系列微控制器的开发中&#xff0c;结合定时器、ADC&#xff08;模数转换器&#xff09;与DMA&#xff08;直接存储器访问&#xff09;控制器&#xff0c;能够显著提升数据采集与传输的效率。本文将指导你如何使用STM32 HAL库&#xff0c;通过定时器触发ADC1的单通道…

认知战认知作战:欧盟向中国纯电动车加关税为背景的认知作战方式与策略

认知战认知作战&#xff1a;欧盟向中国纯电动车加关税为背景的认知作战方式与策略 关键词&#xff1a;欧盟, 中国, 纯电动车, 关税, 认知战, 舆论战, 政治动员, 外交反击, 市场份额, 保护主义, 技术升级, 中立第三方, 友军, 国际贸易, 合作与竞争,认知作战,新质生产力,人类命运…

信号用wire类型还是reg类型定义

wire类型就是一根线&#xff0c;线有两端&#xff0c;一端发生改变&#xff0c;经过线传递的信号当然也会发生改变&#xff0c;reg类型则不同&#xff0c;可以把reg类型理解为存储数据的寄存器&#xff0c;当满足一定条件时&#xff0c;数值才被激活发生改变。 那么&#xff0…

英国本科毕业论文写作如何确立论点

英国本科毕业论文关系到留学生是否能顺利毕业。因此&#xff0c;写好英国本科毕业论文也便成了留学生在毕业季的头等大事。那么应当怎么做才能更好地完成毕业论文呢&#xff1f;在本文中&#xff0c;英国翰思教育将从论点这个内容展开说说&#xff0c;如果高质量地完成毕业论文…

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频&#xff0c;10分钟了解uni-app,为什么要选择uni-app&#xff1f;,功能框架图,一套代码&#xff0c;运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作&#xff1a;HBuilder X 软件 HBuilder X 官网下载&#xf…