redis 限制接口访问频率

2023-05-22,,

代码:

 <?php

 /**
*
*/
class myRedis {
private static $redis = null; /**
* @return null|Redis
*/
public static function instance() {
if(self::$redis === null) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
self::$redis = $redis;
}
return self::$redis;
} /**
* @param $api
* @param string $default
* @return string
*/
private static function getApiLimit($api, $default = '3000') {
$info = [
'user.info' => '500',
'user.login' => '1000'
];
return isset($info[$api]) ? $info[$api] : $default;
} /**
* @return bool
*/
public static function check() { $redis = self::instance();
$api = "md5_check";
$time = self::getApiLimit($api);
$key = "api_limit_" . $api; $num = $redis->incr($key); if($num == 1) {
$redis->pExpire($key, $time);
} else {
// echo "false";
return false;
}
// echo "true";
return true;
}
}

只要在需要限制访问频率接口处加上 myRedis::check() 即可限制该接口访问平率为 2s 一次

不难发现此代码的逻辑非常简单:

设置 key 的有效时间为 2s,当 key 过期后执行 $redis->incr($key); 的结果为 1,所以,每次 $redis->incr($key); 结果为 1,则说明距离上一次访问达到了 2s,重新设置 key 的有效时间并返回 true 即可,其余情况则返回 false。

redis 限制接口访问频率的相关教程结束。

《redis 限制接口访问频率.doc》

下载本文的Word格式文档,以方便收藏与打印。