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

统计用户本月的连续登录天数

记录用户的连续登录天数

  • 访问量:10W+、100W+

技术栈

  • Redis的bitmap: 100w+的日活用户时
  • Redis的sortedSet:10W+的日活用户时
  • Mysql: 10W的日活用户时

简述

  • bitmap:每个月最多31天,即31bit,每一位表示第N天是否登录的状态:0-未登录/1-已登录
  • setbit uid1:2025:6 25 1 (表示uid为1的用户在2025年6月份的25号登录)
  • getbit uid1:2025:6 25 (获取uid为1的用户2025年6月份25号是否登录)
  • bitcount uid1:2025:6 (获取uid为1的用户2025年6月份的登录天数)
  • 要获取当前连续登录的天数则需要代码实现,redis不能直接获取
  • sortedSet,ZADD添加时将当前日期当成score记录,获取时通过ZRangeByScore获取完整的数据,后端做连续登录天数的判断。

代码实现:python

import redis, calendar
from datetime import datetime,date
re = redis.Redis(host='127.0.0.1', port=6379, db=0)
# 获取指定年月的最大天数
def getDays(year, month):max_days = calendar.monthrange(year, month)[1]print("%d年%d月份的最大天数为: %d" % (year, month,  max_days))return max_days
# 签到初始化
def init(uid, year, month, day):key = 'sign:%d:%d:%d' % (uid, year, month)if re.exists(key) == 0: # 首次签到时初始化maxDays = getDays(year, month)for i in range(1, maxDays+1):re.setbit(key, i, 0)print('初始化' , key, i)re.setbit(key, day, 1)  # 统计本次签到的连续签到次数
def static(uid, year, month, day):cc = 0key = 'sign:%d:%d:%d' % (uid, year, month)for i in range(1, day+1):res = re.getbit(key, i)if res == 0:cc = 0else:cc += 1return cc         
# 用户本月的总的签到次数
def getAll(uid, year, month):key = 'sign:%d:%d:%d' % (uid, year, month)return re.bitcount(key) try:today = str(date.today())year, month, day = list(map(int, today.split('-')))uid = 1init(uid, year, month, day)# cc = re.bitcount('uid1') # 统计签到的总次数cc  = static(uid, year, month, day)all = getAll(uid, year, month) print('uid:%d 本次连续签到的次数为:%d, %d 月份的签到次数为:%d' % (uid, cc, month, all))
except Exception as e:print(f"连接失败: {e}")
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/257143.html

相关文章:

  • 多源异构数据接入与实时分析:衡石科技的技术突破
  • 【RAG+向量数据库】小白从0构建一个rag和向量数据库demo
  • Java中进程间通信(IPC)的7种主要方式及原理剖析
  • 《高等数学》(同济大学·第7版)第五章 定积分 第四节反常积分
  • 编程江湖-Git
  • 嵌入式C语言编程规范
  • 制造业B端登录页案例:生产数据安全入口的权限分级设计
  • 【提高+/省选−】洛谷P1127 ——词链
  • 《算法笔记》之二(笔记)
  • 63、不同路径II
  • ✨通义万相 2.1(Wan2.1)环境搭建指南:基于 CUDA 12.4 + Python 3.11 + PyTorch 2.5.1 GPU加速实战
  • 排序算法-python实现
  • C++入门实战--通讯录管理系统
  • 【闲谈】对于c++未来的看法
  • JAVA集合篇--深入理解ConcurrentHashMap图解版
  • git安装使用详细教程
  • MySQL之索引结构和分类深度详解
  • 零基础学习Redis(13) -- Java使用Redis命令
  • Java基础 6.22
  • 【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化
  • 系列一、windows中安装RabbitMQ
  • 硬件面经-具身机器人通用技术要求
  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • 信息安全管理与评估2025湖北卷路由部分答案
  • pyhton基础【14】函数四
  • 爬虫001----介绍以及可能需要使用的技术栈
  • multiprocessing.pool和multiprocessing.Process
  • DeepSeek:中国AI开源先锋的技术突破与行业革新
  • Unity中的Mathf.Clamp
  • 嵌入式软件面经(一)Q: 什么是Modbus协议?它有哪些特点?