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

 

posted @   唯一客服系统开发笔记  阅读(202)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-02-26 [javascript] test() 方法进行正则验证
2019-02-26 [Go] golang创建目录写文件判断文件
2019-02-26 [日常] imap协议读取邮件
2019-02-26 [Go] golang使用github里的imap类库
2016-02-26 [android] 帧布局
2016-02-26 [android] 表格布局和绝对布局
点击右上角即可分享
微信分享提示
1
chat with us