redis限流方法

发现一个好玩的东西,巧妙利用redis做一个限流。

目标:根据特征值(redis的key)对某些个调用(做在中间件里)做一个限流。比如:对某个ip进行限流(仅供参考,不能直接使用)。

功能:可以对所有需要限流的地方做一个限制。

/*
 *$limit_time时间内超过$limit_count次请求次数则提示请求太频繁,请稍后再试
 */

public function handle($request, \Closure $next)
{
    $limit_time = 10;
    $limit_count = 10;
    $machine = $request->header('machine');
   //获取到ip。
    $ip = IpService::_get_client_ip();
    //获取redis对象。
    $redis = RedisService::redis_client();
    $check = $redis->exists($ip);
    if($check){
        $redis->incr($ip);
        $count = $redis->get($ip);
        //时长内请求次数。
        if($count > $limit_count){
            exit('请求太频繁,请稍后再试!');
        }
    }else{
        $redis->incr($ip);
        //限制时长
        $redis->expire($ip,$limit_time);
    }
    return $next($request);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值