Phalapi 2.x - Redis 限制访问频率

适用于Phalapi 2.x的Redis限制用户访问api频率请求的函数方法实现。

Redis DI注册

1
2
$config    = array('host' => '你的 Redis 地址', 'port' => 你的 Redis 端口号);
$di->cache = new PhalApi\Cache\RedisCache($config);

调用

1
2
// 检测token在某个时间段请求了几次 半小时内请求30次禁止请求
\api\checkRequestsNums($user_id);

方法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 限制每个用户每半小时请求次数 半小时内超过30次请求就抛出异常
* @param int $user_id
*/
public function checkRequestsNums($user_id = 0)
{
// 这个key记录该ip的访问次数 也可改成用户id
$key = $user_id;
//限制次数为30次。
$num = 30;
$di = \PhalApi\DI();
$count = $di->cache->get($key);
if ($count) {
//次数累加,限制时间为1800秒 = 30分钟
$di->cache->set($key, $count + 1, 1800);
if ($count > $num) {
throw new BadRequestException('超过限定时间最大请求,歇一会再试。', 401);
}
} else {
//初始化,限制时间为1800秒 = 30分钟
$di->cache->set($key, 1, 1800);
}
}