• [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));
    }

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    Python 缓冲区
    Python接收执行参数
    Python编码
    Maven 多环境 打包
    JS 时间 获取 当天,昨日,本周,上周,本月,上月
    Window Mysql 5.7.18安装
    Eclipse 更改Maven项目名
    Redis 命令
    Redis 安装 和 启动
    Mongodb 安装 和 启动
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14452261.html
Copyright © 2020-2023  润新知