有时候我们需要给我们写的接口来定义请求限制次数(限流) 如多长时间之内只能请求多少次。这样可以防止某些恶意用户一直请求我们的接口 给服务器减轻压力。
应用场景: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就可以了。
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论