使用 Redis 限制访问次数
2 min read
最近在写 Ten·API 的新后台,打算限制一下用户的日请求数,所以简单学了一下Redis,每个自然日(0时-24时)限制请求 1000
次。
<?php
<?php
/**
* title: Redis请求限制
* update: 2024-05-03
* author: iami233
*/
date_default_timezone_set('PRC'); // 指定时区为中国
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_database_name', 'username', 'password');
// 获取token
$token = filter_input(INPUT_GET, 'token');
if (!$token) {
die("请传递Token");
}
// 从数据库验证token
$query = $db->prepare("SELECT COUNT(*) FROM table WHERE token = ?");
$query->execute([$token]);
if ($query->fetchColumn() == 0) {
die("无效的Token");
}
// 连接Redis
$redis = new Redis();
if (!$redis->connect('127.0.0.1', 6379)) {
die("无法连接到Redis");
}
// 设置或更新请求计数
$requestsLimit = 1000; // 每天最大请求次数
$requestsCount = $redis->incr($token);
if ($requestsCount === 1) {
// 初次设置时,设定过期时间至第二天0点
$expiresAt = strtotime('tomorrow');
$redis->expireAt($token, $expiresAt);
}
// 检查请求次数是否超过限制
if ($requestsCount > $requestsLimit) {
echo "次数用尽,已达到上限{$requestsCount}次";
} else {
echo "已经调用{$requestsCount}次";
}