Redis实现每日签到(大数据量)

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能

目录

问题

解决方式

封装签到类

功能调用

总结


问题

实现用户每日签到功能不难,但随着用户量上升之后,不论是存储还是判断对数据量来说都很麻烦;假如每天有100万用户签到,如何存储、判断签到和显示每月签到记录。

解决方式

通过Redis 二进制数据实现签到。

封装签到类

在其中将redis的链接、储存、查询等操作进行封装,提供签到、补签、查看当月签到记录等功能接口。

具体代码如下:

<?phpclass Sign
{private $link;private static $signList = 'signDay';public function __construct(){$this->link = $this->connect();}private function connect(){$redis = new \Redis();$host = '127.0.0.1'; // Redis服务器地址$port = 6379;        // Redis端口号,默认是6379$timeout = 0;        // 连接超时时间(可选,默认为0,代表无超时,单位秒)$redis->connect($host, $port, $timeout);return $redis;}/*** 进行签到* @return bool*/public function addDay(){// 判断今日是否签到$nowD = date('d');$isSign = $this->isSign($nowD-1);if (!in_array($isSign, ['0', '1'], true)) {// 进行签到return $this->link->append(self::$signList, '1');}return true;}/*** 获取签到列表* @return string*/public function getDayList(){return $this->link->getRange(self::$signList, 0, -1);}/*** 对指定日期进行补签* @param string $d* @return bool|int*/public function repairDay(string $d){$nowDay = date('d');if ($nowDay == $d) {return $this->addDay();}// 判断补签日期是否已签到$offset = $d - 1;if ($this->isSign($offset)) {return true;}return $this->link->setRange(self::$signList, $offset, 1);}/*** 是否签到* @param $offset:偏移量* @return string*/private function isSign($offset){return $this->link->getRange(self::$signList, $offset, $offset);}public function __destruct(){$this->link->close();}
}

 

功能调用

在实例化后,调用当日签到,补签本月6号的记录,之后查询本月签到记录。

示例如下:

<?phprequire_once './Sign.php';$obj = new Sign();
// 签到
$info = $obj->addDay();
// 补签 本月6号的记录
$info = $obj->repairDay('6');// 获取签到列表
$dayList = $obj->getDayList();
print_r(str_split($dayList, 1));

运行结果:

总结

PHP语言使用Redis NoSQL服务器二进制数据类型实现大数据情况下签到功能。

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题

一、在图 24-2上运行Dijkstra算法&#xff0c;第一次使用结点 s s s作为源结点&#xff0c;第二次使用结点 z z z作为源结点。以类似于图 24-6 的风格&#xff0c;给出每次while循环后的 d d d值和 π π π值&#xff0c;以及集合 S S S中的所有结点。如果要写代码&#xff0c…

使用容器启动的zk无法暴露3888问题解决

1. 问题描述 zk配置如下&#xff1a; 我通过容器启动了一个zk&#xff0c;通过-p 参数暴露了2181和3888端口&#xff0c;容器启动脚本如下&#xff1a; #!/bin/shdocker rm -f myzookeeper1docker run -p 12181:2181 -p 13888:3888 --name myzookeeper1 --restart always …

利士策分享,国庆日,共筑梦想,同庆辉煌

利士策分享&#xff0c;国庆日&#xff0c;共筑梦想&#xff0c;同庆辉煌 今天是我们的祖国成立的第75个国庆日&#xff0c;在这个举国同庆的日子里&#xff0c;我感受到了浓厚的节日氛围。 此刻的你&#xff0c;是否也在和家人朋友一起享受这份难得的宁静与快乐呢&#xff1f…

AI产品经理PRD文档与传统产品经理PRD有什么不同呢?

目录 模型输出&#xff1a;说白了&#xff0c;就是你的AI要干啥数据接入&#xff1a;你的AI要吃啥“粮食”验收标准&#xff1a;怎么判断你的AI干得好不好经验总结 你好&#xff0c;我是三桥君 在工作中&#xff0c;当我作为传统产品经理时&#xff0c;通常只需提供产品需求文…

SigmaStudio控件Cross Mixer\Signal Merger算法效果分析

衰减与叠加混音算法验证分析一 CH2:输入源为-20dB正弦波1khz CH1叠加混音&#xff1a;参考混音算法https://blog.csdn.net/weixin_48408892/article/details/129878036?spm1001.2014.3001.5502 Ch0衰减混音&#xff1a;外部多个输入源做混音时&#xff0c;建议参考该算法控件&…

宝塔的软件商店打不开怎么办?

宝塔的软件商店打不开怎么办&#xff1f; 请从下面这个按钮进入&#xff1a; 或者尝试直接打开链接&#xff1a;https://127.0.0.1:1234/soft

自定义注解加 AOP 实现服务接口鉴权以及内部认证

注解 何谓注解&#xff1f; 在Java中&#xff0c;注解&#xff08;Annotation&#xff09;是一种特殊的语法&#xff0c;用符号开头&#xff0c;是 Java5 开始引入的新特性&#xff0c;可以看作是一种特殊的注释&#xff0c;主要用于修饰类、方法或者变量&#xff0c;提供某些信…

Redis: Sentinel哨兵监控架构及环境搭建

概述 在主从模式下&#xff0c;我们通过从节点只读模式提高了系统的并发能力并发不断增加&#xff0c;只需要扩展从节点即可&#xff0c;只要主从服务器之间&#xff0c;网络连接正常主服务器就会将写入自己的数据同步更新给从服务器&#xff0c;从而保证主从服务器的数据相同…

推送k8s镜像到阿里云服务器

1、服务打包 2、打包后进入Dockerfile的同级目录 运行 docker build -t 镜像名:镜像版本 . (这个点是当前目录的意思&#xff0c;不能忽略)例如 docker build -t trac:v1.0.4 .3、上传镜像到阿里云镜像服务 注意选择区域 例如&#xff1a; docker tag 70743d9bdba3 registr…

jni动态库“%1 不是有效的win32应用程序”问题的解决以及一些windows下dll有关命令的记录

一、前因 在windows下用cmakeVS编译了一个jni动态库&#xff0c;再使用java测试程序调用这个动态库的时候报错&#xff1a;“%1 不是有效的win32应用程序” 对于这类问题&#xff0c;一般从以下几个方面考虑&#xff1a; 动态库文件损坏动态库或者其依赖库文件路径错误导致找…

计算机网络:计算机网络概述:网络、互联网与因特网的区别

文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…

十二、磁盘的调度算法

1.先来先服务(FCFS) 思想 优点 缺点 按访问请求到达的先后顺序进行处理 公平; 如果请求访问的磁道比较集中的话&#xff0c;算法性能还算过的去 如果有大量进程竞争使用磁盘&#xff0c;请求访问的磁道很分散&#xff0c;则FCFS在性能上很差&#xff0c;寻道时间长。 2.最…

STM32新建工程-基于库函数

一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 keil5里面的小助手&#xff0c;暂时不用&#xff0c;叉掉 二、为工程添加文件和路径 在工程模板中还需要添加启动文件、系统头文件、系统时钟文件&#xff0c;创建一个文件夹start&#xff0c;将下面…

wenyan:markdown 一键转换文章排版

介绍 今天给大家介绍一个markdown排版成自媒体文章的工具。 markdown 的重要性和便捷性不用再多说&#xff0c;但是从markdown 转换到文章排版&#xff0c;我换了很多个也都很不满意&#xff0c;尤其在不支持markdown的平台&#xff0c;更是一言难尽。 本次介绍的wenyan的核心…

C++语言学习(1): std::endl 在做什么?

std::endl 是一个函数&#xff08;而不是变量&#xff09;&#xff1a; std::endl 会向控制台写入 \n 字符&#xff0c;并且刷新缓冲。 刷新缓冲肯定比不刷新缓冲慢。 这就是为什么有些 guide 里提到&#xff0c;少用 std::endl, 多用 \n.

HarmonyOS NEXT:实现电影列表功能展示界面

时至今日HarmonyOS NEXT早已发布运行了&#xff0c;等其正式推出并大规模商用后&#xff0c;HarmonyOS的历史使命就完成并将退出历史舞台&#xff0c;为用户提供丰富的应用选择。但是Harmony NEXT是在HarmonyOS基础上剔除安卓&#xff08;AOSP&#xff09;后的产品&#xff0c;…

C++进阶(3): 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于等于 根节点的值若它的右子树不为空&#xff0c;则右子树上所有的节点的值都大于等…

嘉立创编辑器中删除自己画的封装

快速创建一个元件及封装可参考 需要删除封装的原因 在添加新的元件时&#xff0c;有时候明明关联了封装和符号&#xff0c;但在原理图中添加元件时会出现封装未添加的问题。可能是这个立创EDA中有些功能问题很少使用&#xff0c;所以没完善。而且发现在封装中可以关联器件&am…

【开源鸿蒙】OpenHarmony 5.0.0 发布了,速来下载最新代码

【开源鸿蒙】OpenHarmony 5.0.0 发布了&#xff0c;速来下载最新代码 一、写在前面二、准备命令工具三、配置用户信息四、下载OpenHarmony源码4.1 使用ssh协议下载&#xff08;推荐&#xff09;4.2 使用https协议下载 五、下载编译工具链六、参考链接 今天是9月30号&#xff0c…

ThreadLocal原理解析及面试

基本使用 讲原理之前&#xff0c;我简单写个demo小程序 public class TestThreadLocal {public static void main(String[] args) throws InterruptedException {ThreadLocal<String> tl new ThreadLocal();/**主线程设置了一个值*/tl.set("SSSSSs");//tl.…