[PHP] PHP redis滑动窗口频率限制

使用redis进行频率限制 , 并且使用滑动窗口形式 , 可以防止临界点时的超频

代码在下面 ,请自行替换new Redis()对象

 function check($queueName,$count,$timeWindow){
        $currTime=time();
        $redis = php-redis对象;//自行连接redis
        $length=$redis->lLen($queueName);
        if($length<$count){
            $redis->lPush($queueName,$currTime);
            $redis->expire($queueName,$timeWindow);
            return true;
        }
        //队列满了,取出最早访问的时间
        $earlyTime= $redis->lIndex($queueName,$length-1);
        //说明最早期的时间还在时间窗口内,还没过期,所以不允许通过
        if ($currTime-$earlyTime <= $timeWindow) {
            return false;
        } else {
            //说明最早期的访问应该过期了,去掉最早期的
            $redis->rPop($queueName);
            $redis->lPush($queueName,$currTime);
            $redis->expire($queueName,$timeWindow);
        }
        return true;
    }

使用方式 , 比如说24小时一次 ,对手机号的限制

if(check("tel-{$telephone}:",1,24*3600)){
    $json=array("code"=>400,"msg"=>"当前手机号频率限制");
    exit(json_encode($json));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值