欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > Redis实现每日签到(大数据量)

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

2024/11/30 12:50:26 来源:https://blog.csdn.net/json_ligege/article/details/142675151  浏览:    关键词: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服务器二进制数据类型实现大数据情况下签到功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com