php限制访问次数,api接口限流(限制请求次数)

4faac543fb292ff220b091a985bedbed.png

有时候我们需要给我们写的接口来定义请求限制次数(限流) 如多长时间之内只能请求多少次。这样可以防止某些恶意用户一直请求我们的接口 给服务器减轻压力。

应用场景:app端 用户收藏文章 取消收藏文章(某些恶意用户一直在app端重复点击收藏或取消收藏 这样对我们的数据库会造成很大的压力)

/**

* 限制接口请求次数

* @param  string $key   key名称

* @param  int    $time  过期时间 单位:秒

* @count  int    限制请求次数

* @author zhouyulin@smzdm.com

* @date   2018-06-11

*/

public function redis_limit($key,$time = 20,$count = 3)

{

$result = array(

'error_code' => 0,

'error_msg'  => '',

'data' => [],

);

$redis = new Redis();

$redis->connect('127.0.0.1',6379);

//$redis->auth('xxxxxx'); //Redis链接密码 如没有可不用写这一步

$key_res = $redis->exists($key); //key是否存在

if($key_res)

{

$redis->incr($key); //key对应的值自增1

$nums = $redis->get($key); //获取key的值

//key的值超过了请求次数

if($nums > $count)

{

$result['error_code'] = 1;

$result['error_msg']  = '操作频繁!请稍后重试!';

goto ARCHOR_RESULT;

}

}

else

{

//key不存在 写入redis

$redis->setex($key,$time,1); //key 时间 值

}

ARCHOR_RESULT:

return $result;

}

这样就可以了 在用户相关地方调用以上方法即可   传入的key可以是当前登录用户的主键id值 只要是唯一的 能够在redis中标识这是唯一的key就可以了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部