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

该博客介绍了如何利用Redis进行接口限流,通过限制在一定时间内用户对特定接口(如收藏文章)的请求次数,以防止恶意用户过度请求导致服务器压力过大。文中提供了一个PHP函数示例,展示了如何检查和更新Redis中的key来限制接口请求次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值