一个小小的签到功能,到底用MySQL还是Redis?

NXP S32k3 MCAL EMIOS PWM配置 NXP s32k 配置 EMIOS PWM 阅读详情

今天,看下签到功能怎么选择?

现在的网站和app开发中,签到是一个很常见的功能,如微博签到送积分,签到排行榜~

微博签到

如移动app ,签到送流量等活动,

移动app签到

用户签到是提高用户粘性的有效手段,用的好能事半功倍!

下面我们从技术方面看看常用的实现手段:

一. 方案1

直接存到数据库MySQL

用户表如下:

last_checkin_time 上次签到时间

checkin_count 连续签到次数

记录每个用户签到信息

签到流程

1.用户第一次签到

last_checkin_time = time()checkin_count=1

2.用户非第一次签到,且当天已签到

什么也不做,返回已签到。

3.用户非第一次签到,且当天还未签到

a.昨天也有签到

last_checkin_time = time()checkin_count= checkin_count+1

b.昨天没有签到

last_checkin_time = time()checkin_count=1

使用yii实现的代码如下:

//0点$today_0 = strtotime(date('y-m-d'));//昨天0点$yesterday_0 = $today_0-24*60*60;$last_checkin_time = $model->last_checkin_time;if(empty($last_checkin_time)){ //first checkin $model->last_checkin_time = time(); $model->checkin_count = 1;  }else{ if($today_0 < $last_checkin_time){  //checkin ed 当天已签到过  return json_encode(['code' => 0, 'msg' => '已签到成功']); } //昨天签到过 if($last_checkin_time < $today_0 && $last_checkin_time > $yesterday_0){  $model->last_checkin_time = time();  $model->checkin_count = $model->checkin_count + 1;  }else{  //昨天没签到过,重新计数  $model->last_checkin_time = time();  $model->checkin_count = 1; }}$rs = $model->save();

二. 方案2

redis实现方案,使用bitmap来实现,bitmap是redis 2.2版本开始支持的功能,一般用于标识状态,

另外 ,用bitmap进行当天有多少人签到非常的方便,使用bitcount

count=redis->BITCOUNT($key);


签到流程

设置两个bitmap ,

  • 一个以每天日期为key ,每个uid为偏移量

  • 一个以用户uid为key ,当天在一年中的索引为偏移量,

这样记录一个用户一年的签到情况仅需要365*1bit

以下是签到代码

//每天一个key  $key = 'checkin_' . date('ymd');  if($redis->getbit($key, $uid)){   //已签到   return json_encode(['code' => 0, 'msg' => '已签到成功']);  }else{   //签到   $redis->setbit($key, $uid, 1);   $redis->setbit('checkin_'.$uid , date('z'), 1);  }

以下是用户连续签到计算

public static function getUserCheckinCount($uid){  $key =  'checkin_'.$uid;  $index = date('z');  $n = 0;  for($i = $index; $i>=0;$i--){   $bit = Yii::$app->redis->getbit($key, $i);   if($bit == 0) break;   $n++;  }  return $n; }

以下是计算一天签到用户数

$key = 'checkin_' . date('ymd');$redis = Yii::$app->redis;$count = $redis->BITCOUNT($key);

还有什么需求呢?可以自己试着去实现


三. 优缺点比较

1、直接MySQL

思路简单,容易实现;

缺点:占用空间大,表更新比较多,影响性能,数据量大时需要用cache辅助;

2、Redis bitmap

优点是:占用空间很小,纯内存操作,速度快;

缺点是:记录的信息有限,只有一个标识位;

偏移量不能大于2^32,512M;大概可以标识5亿个bit位,绝大多数的应用都是够用的啦;

偏移量很大的时候可能造成 Redis 服务器被阻塞;所以要考虑切分。

好啦,两种方式介绍完了,各有利弊,你喜欢哪种方式呢?

欢迎留言讨论!

作者:一起web编程

来源:http://suo.im/5EWN3k

3060台式机 Ubuntu 双系统部署 LingBot-Map 完整指南 摘要: 本文详细介绍了在配备RTX 3060显卡的台式机上部署Ubuntu双系统并安装LingBot-Map 3D重建模型的完整流程。LingBot-Map作为蚂蚁灵波科技开源的Transformer架构模型,在流式3D场景重建中展现出高效性能(20 FPS)和卓越精度(ATE仅6.42米)。指南涵盖关键准备步骤、UEFI分区原理、Ubuntu安装流程(推荐150GB空间及手动分区方案),以及后续驱动配置说明,特别强调RTX 3060需12GB显存支持,并提供了数据备份、Secure Boot处理等实用建议 阅读详情

相关推荐

从零复刻平衡小车(基于STM32F1)

平衡小车(基于STM32F1)

Legendyyy的博客 5041

【php毕业设计】基于php+mysql的学生签到考勤系统设计与实现(毕业论文+程序源码)——学生签到考勤系统

大家好,今天给大家介绍基于php+mysql的学生签到考勤系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录: 项目难度:中等难度 适用场景:相关题目的毕业设计 配套论文字数:9457个字34页 包含内容:整套源码+完整毕业论文+答辩PPT提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。第一章 概 述 1.1 PHP的概念 PHP: Hypertext Preprocessor (超文本预处理器) 的缩写,它是一种服务器端的 HTML 脚本/编程语言,是一种简单的

m0_66238867的博客 6838

Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码)

本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。

weixin_42741930的博客 264

java签到 表设计_java springboot 7天签到功能设计 数据库表设计 加代码

实现一个类似于这样的签到功能 (参考的百度网盘签到页面) 数据表是一个用户只有一条签到记录的设计, 没有使用签到一次表中加一条数据, 那样的话数据太多了表结构:CREATE TABLE `sign_in` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`user_id` bigint(20) NOT NULL COMMENT '签到用户...

weixin_42512903的博客 2753

Android Camera性能优化概述

做camera性能优化方面的工作有几年了,想写一篇文章简单介绍一下其中涉及到的具体技术,这篇文章会大概介绍一下涉及到的技术。

weixin_42136255的博客 4027

AI智能体项目管理框架agent-pm:从原理到实战的多智能体协作指南

在人工智能和自动化技术快速发展的今天,多智能体系统已成为实现复杂任务自动化的重要技术路径。其核心原理在于通过任务分解、角色分配和状态管理,让多个AI智能体像人类团队一样协同工作,从而突破单个模型的性能边界。这种架构的技术价值在于将软件工程中成熟的项目管理方法论引入AI领域,显著提升了自动化流程的可预测性、可观测性和可复用性。在实际应用场景中,多智能体协作框架能够高效处理从代码开发、文档撰写到数据分析等一系列任务,尤其适合需要多步骤、多专业协同的复杂项目。本文聚焦的agent-pm框架,正是这一领域的典型实践

weixin_42533910的博客 715

javaweb 签到 功能实现 mysql_签到功能,用mysql还是redis?

之前发过一篇:受到大家喜欢,今天看下签到功能怎么选择?现在的网站和app开发中,签到是一个很常见的功能,如微博签到送积分,签到排行榜微博签到 如移动app ,签到送流量等活动,移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍!下面我们从技术方面看看常用的实现手段:一. 方案1直接存到数据库MySQL用户表如下:last_checkin_time 上次签到时间 checkin_co...

weixin_33344629的博客 323

别再手动算考勤了!教你用Python+企业微信API自动生成月度报表

本文介绍如何利用Python和企业微信API构建自动化考勤分析系统,实现从数据获取到可视化报表生成的全流程自动化。通过企业微信打卡接口获取数据,使用Pandas进行高效清洗和分析,并生成Excel和HTML格式的报表,大幅提升考勤统计效率。系统支持智能判定考勤状态,如迟到、早退等,并可通过定时任务实现月度自动化运行。

weixin_27875131的博客 292

Java中Springboot实战之签到功能详解(超全面)

签到功能、SpringBoot实战、MyBatisPlus、微服务、Java项目实战、分布式任务调度

qq_57469718的博客 1万+

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

本文详细介绍了如何使用STM32微控制器驱动TI的DAC8568多通道DAC控制器,实现高精度的多通道同步模拟信号输出。内容涵盖硬件设计要点、SPI时序精准配置、驱动层命令构建,并重点解析了通过LDAC引脚实现同步更新的核心策略,提供了完整的代码框架和实战案例,帮助工程师快速解决多通道同步输出的工程难题。

weixin_29179311的博客 173

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1018

点赞、签到、秒杀的设计与实现(真实场景)

前言 这次来总结思考一下工作中的两个功能的设计与实现,一是丰享达人榜,二是丰享签到活动,这里涉及到两个典型的互联网应用场景:点赞和签到,都是qps,qps可能较高,要求接口延迟较短,有较好的用户交互体验。当然我们不可能像互联网大厂那样自研中间件,数据的存储无疑就是redis和mysql,从前面的要求来看,我们不能每次操作都对数据库进行操作,好在这类数据都不算敏感,可以容许因为异常导致的丢失和不准确,所以基本思路应该就是:主要依赖于redis缓存的crud操作,异步再去持久化数据到数据库,接下来看看具体的实

u013146060的博客 786

海康威视嵌入式最全面试题及参考答案(3万字长文)

主营业务:提供包括前端摄像头、后端存储设备、显示控制设备等在内的全方位视频监控解决方案。市场地位:在全球范围内享有较高的市场份额,在安防领域具有较强的竞争力。技术创新:持续投入研发,拥有多项核心技术和专利,特别是在视频处理算法、人工智能等方面取得了显著成果。社会责任:积极参与公共安全项目,为智慧城市、交通管理等领域提供技术支持和服务。国际业务:除了国内市场外,海康威视的产品和服务也销往全球多个国家和地区。面向对象编程。

大模型大数据攻城狮的专栏 1765

一个小小的签到功能,到底用 MySQL 还是 Redis?

本文探讨了互联网应用中签到功能的数据库选型问题,对比分析了MySQL和Redis两种存储方案的实现方式与适用场景。MySQL方案通过关系型表结构实现,支持事务和复杂查询,但高并发写入性能受限;Redis利用Bitmap数据结构,存储空间极小且性能极高,但存在数据持久化风险。文章详细介绍了两种方案的技术实现细节,包括连续签到计算、跨月处理等核心问题,并针对不同规模项目给出建议:小型项目可优先选择MySQL,高并发场景推荐Redis,最佳实践是采用Redis+MySQL的混合架构。最后强调应根据业务规模、并发要

油墨香^-^的博客 1142

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

一个小小的签到功能,到底用MySQL还是Redis

今天,看下签到功能怎么选择? 现在的网站和app开发中,签到是一个很常见的功能,如微博签到送积分,签到排行榜~ 微博签到 如移动app ,签到送流量等活动, 移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍! 下面我们从技术方面看看常用的实现手段: 一. 方案1 直接存到数据库MySQL 用户表如下: last_checkin_time 上次签到时间 checkin_count 连续签到...

风水道人 376

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

一个小小的签到功能,到底用 MySQL 还是 Redis ? ?

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 310

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

javaweb 签到 功能实现 mysql_一个小小的签到功能,到底用MySQL还是Redis?

现在的网站和app开发中,签到是一个很常见的功能如微博签到送积分,签到排行榜微博签到如移动app ,签到送流量等活动,移动app签到用户签到是提高用户粘性的有效手段,用的好能事半功倍!下面我们从技术方面看看常用的实现手段:一. 方案1直接存到数据库MySQL用户表如下:last_checkin_time 上次签到时间checkin_count 连续签到次数记录每个用户签到信息签到流程1.用户第一次...

weixin_42512966的博客 333

php redis 签到,PHP实现一个小小的签到功能,到底用MySQL还是Redis?

今天,看下签到功能怎么选择?现在的网站和app开发中,签到是一个很常见的功能,如微博签到送积分,签到排行榜~微博签到 如移动app ,签到送流量等活动,移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍!下面我们从技术方面看看常用的实现手段:一. 方案1直接存到数据库MySQL用户表如下:last_checkin_time 上次签到时间 checkin_count 连续签到次数记录...

weixin_29940173的博客 280
上一篇: JAVA三年还不懂它,离被优化不远了。。。
下一篇: 14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值