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

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.mrgr.cn/news/40857.html

相关文章:

  • Java之方法的使用
  • 端到端如火如荼, 传统规划控制还有前途吗?
  • Linux系统命令:用于改变用户的登录 Shell 的命令chsh命令详解
  • 有没有免费写论文的软件?推荐这5款
  • 深耕领域、拓宽视野与培养软技能
  • C++语言学习(2): name lookup 的概念
  • 面试题1-fail-safe机制与fail-fast 机制
  • JavaScript Set基础与实战应用
  • 使用容器启动的zk无法暴露3888问题解决
  • 您的计算机已被Lockbit3.0勒索病毒感染?恢复您的数据的方法在这里!
  • 【论文阅读】基于真实数据感知的模型功能窃取攻击
  • 内存对齐的原理和使用
  • 使用 Docker 制作 YashanDB 镜像:深度解析与实战指南
  • MongoDB 副本集搭建 【docker compose + 本机部署】【建议收藏起来】
  • Oracle架构之数据库备份和RAC介绍
  • 计算机毕业设计 家校互联管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • SpringCloudEureka实战:搭建EurekaServer
  • SigmaStudio控件Cross Mixer\Signal Merger算法效果分析
  • 代码随想录Day23—回溯2
  • XSS基础