【Redis】 - Redis的Bitmap实现用户签到

Redis的Bitmap实现用户签到

使用Redis的Bitmap数据结构来记录用户的每日签到状态是一种高效且节省空间的方法。通过将用户ID和日期结合生成动态Key,可以轻松管理不同用户在不同日期的签到情况。下面详细介绍如何设计这一方案。

设计思路

  1. 动态Key生成:根据用户ID和日期生成唯一的键名,例如sign:202310:user123表示用户user123在2023年10月的签到记录。

  2. 位偏移量:每月的每一天对应于该用户签到记录中的一位。例如,在一个31天的月份里,1号对应的偏移量为0,2号对应的偏移量为1,以此类推。

  3. 操作命令

    • 使用SETBIT命令设置某一天的签到状态(1为已签到,0为未签到)。
    • 使用GETBIT命令获取某一天的签到状态。
    • 使用BITCOUNT命令计算一个月内的总签到次数。
    • 可以使用BITOP命令对多个用户的签到记录进行逻辑运算,如计算共同签到的日子等。

实现步骤

1. 设置签到状态

假设今天是本月的第5天,想要记录用户user123今天已签到:

SETBIT sign:202310:user123 4 1

这里4是因为位索引从0开始。

2. 查询签到状态

查询用户user123在本月第5天是否签到:

GETBIT sign:202310:user123 4

如果返回值为1,则表示已经签到;如果是0,则表示未签到。

3. 统计签到次数

统计用户user123在本月总共签到了多少天:

BITCOUNT sign:202310:user123
4. 计算连续签到天数

要实现计算连续签到天数,可能需要编写脚本或使用服务端Lua脚本来遍历并检查连续的位是否为1。

注意事项

  • 月份变化时的处理:每个月都需要一个新的键来存储该月的签到信息,因此需要确保能够正确地生成每个月的新键,并妥善处理跨月的签到请求。
  • 内存占用:虽然Bitmap非常节省空间,但如果用户基数很大,依然需要注意内存消耗问题。
  • 性能考虑:对于大规模用户群,建议批量操作,比如使用MSETBIT或者脚本来减少网络往返时间。

这种设计不仅利用了Redis的高速读写能力,还通过位图实现了极其紧凑的数据存储方式,非常适合用于处理大规模用户的签到场景。

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

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

相关文章

2025 西湖论剑wp

web Rank-l 打开题目环境: 发现一个输入框,看一下他是用上面语言写的 发现是python,很容易想到ssti 密码随便输,发现没有回显 但是输入其他字符会报错 确定为ssti注入 开始构造payload, {{(lipsum|attr(‘global…

Web前端开发--HTML

HTML快速入门 1.新建文本文件&#xff0c;后缀名改为.html 2.编写 HTML结构标签 3.在<body>中填写内容 HTML结构标签 特点 1.HTML标签中不区分大小写 2.HTML标签属性值中可以使用单引号也可使用双引号 3.HTML语法结构比较松散&#xff08;但在编写时要严格一点&…

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代&#xff0c;最初由Xerox公司的帕洛阿尔托研究中心&#xff08;PARC&#xff09;开发。最初的以太网采用同轴电缆作为传输介质&#xff0c;数据传输速率为2.94Mbps&#xff08;后发展为10Mbps&#xff09;&#xff0c;主要用于解决…

ONES 功能上新|ONES Copilot、ONES TestCase、ONES Wiki 新功能一览

ONES Copilot 支持基于当前查看的工作项相关信息&#xff0c;利用 AI 模型&#xff0c;在系统中进行相似工作项的查找&#xff0c;包括基于已关联工作项的相似数据查找。 应用场景&#xff1a; 在查看工作项时&#xff0c;可利用 AI 模型&#xff0c;基于语义相似度&#xff0c…

从 X86 到 ARM :工控机迁移中的核心问题剖析

在工业控制领域&#xff0c;技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而&#xff0c;这一过程并非一帆风顺&#xff0c;面临着诸多关键挑战。 首先&#xff0c;软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…

《qt open3d网格平滑》

qt open3d网格平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterSmoothSimple_triggered();void MainWindow::on_actionF

Redis 的缓存雪崩、缓存穿透和缓存击穿详解,并提供多种解决方案

本文是对 Redis 知识的补充&#xff0c;在了解了如何搭建多种类型的 Redis 集群&#xff0c;并清楚了 Redis 集群搭建的过程的原理和注意事项之后&#xff0c;就要开始了解在使用 Redis 时可能出现的突发问题和对应的解决方案。 引言&#xff1a;虽然 Redis 是单线程的&#xf…

路由过滤方法与常用工具

引言 在前面我们已经学习了路由引入&#xff0c;接下来我们就更进一步来学习路由过滤 前一篇文章&#xff1a;重发布&#xff1a;路由引入&#xff08;点击即可&#xff09; 路由过滤 定义&#xff1a;路由器在发布或者接收消息时&#xff0c;可能需要对路由信息进行过滤。 作用…

元宵佳节,我的创作纪念日:技术之路的回顾与展望

今天是元宵节&#xff0c;一个象征着团圆与美好的节日。巧合的是&#xff0c;今天也是我作为技术博客博主的创作纪念日。在这个特别的日子里&#xff0c;我想和大家分享我的创作故事&#xff0c;回顾初心、总结收获、展望未来&#xff0c;同时也希望能为正在技术道路上探索的你…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC&#xff0c;翻阅手册的时候&#xff0c;发现了一个有意思的功能 混杂模式 H743的MAC控制器&#xff0c;可以设置为混杂模式&#xff0c;这就意味着它可以做一些网络监控的应用&#xff0c;譬如连接具备端口镜像功能的交换机&#xff0c;然后直接代替PC实现网络数据…

一个AI应用的开发、上线流程解析

目录 1. 模型文件格式 1.1 CheckPoint (ckpt) 文件格式 1.2 .pth 文件格式 1.3 .mindir 文件格式 1.4 .onnx 文件格式 2. 推理&#xff08;Inference&#xff09; 2.1.pth (PyTorch模型格式) 2.2 .mindir (MindSpore模型格式) 2.3.onnx (开放神经网络交换格式) 2.4实…

使用grafana v11 建立k线(蜡烛图)仪表板

先看实现的结果 沪铜主力合约 2025-02-12 的1分钟k线图 功能介绍: 左上角支持切换主力合约,日期,实现动态加载数据. 项目背景: 我想通过前端展示期货指定品种某1天的1分钟k线,类似tqsdk 的web_gui 生成图形化界面— TianQin Python SDK 3.7.8 文档 项目架构: 后端: fastap…

【C++】解锁<list>的正确姿势

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…

JUC并发—1.Java集合包底层源码剖析

大纲 1.为什么要对JDK源码剖析 2.ArrayList源码一&#xff1a;基本原理以及优缺点 3.ArrayList源码二&#xff1a;核心方法的原理 4.ArrayList源码三&#xff1a;数组扩容以及元素拷贝 5.LinkedList源码一&#xff1a;优缺点和使用场景 6.LinkedList源码二&#xff1a;双…

修改docker内容器中的某配置文件的命令

先找到配置文件config.php find / -name "config.php" 2>/dev/null 然后用vi编辑器修改配置文件 vi /var/www/config.php 最后就是vi的基本操作&#xff0c;根据具体需求使用&#xff1a; vi 有两种主要模式&#xff1a; 命令模式&#xff1a;进入 vi 后的默认…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

使用Docker部署MySQL 5.7并配置防火墙

步骤1: 切换到超级用户 首先&#xff0c;打开终端&#xff0c;输入以下命令切换到超级用户(root)&#xff1a; su 然后输入您的root密码。 步骤2: 启动Docker服务 确保Docker服务已经启动。可以使用如下命令启动Docker&#xff08;如果它尚未运行&#xff09;&#xff1a;…

vue elementui select下拉库组件鼠标移出时隐藏下拉框

方案&#xff1a; select 监听 mouseleave事件&#xff0c;当鼠标离开时通过唯一标识ref设置select 下拉框隐藏&#xff0c;并做失焦 <el-select v-model"value" :popper-append-to-body"false" class"select_drop_inner" size"sm…

国产操作系统安装DeepSeek

从年前到现在&#xff0c;DeepSeek这款语言AI模型&#xff0c;一经发布直接在全球爆火&#xff0c;在热搜上更是牢牢占据一席之地。无论是技术大神&#xff0c;还是紧跟潮流的技术小白&#xff0c;都被它强大的自然语言处理能力所吸引。作为国产操作系统的用户&#xff0c;千万…

记使用AScript自动化操作ios苹果手机

公司业务需要自动化操作手机&#xff0c;本来以为很困难&#xff0c;没想到使用AScript工具出乎意料的简单&#xff0c;但是还有很多坑存在&#xff0c;写个博客记录一下。 工具信息&#xff1a; 手机&#xff1a;iphone7 系统版本&#xff1a;ios15 AScript官方文档链接&a…