[PHP] PHP redis滑动窗口频率限制
2023-02-18 15:41:51 时间
使用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)); }
相关文章
- 讲道理,只要你是一个爱折腾的程序员,毕业找工作真的不需要再花钱培训!
- 刚毕业不久,接私活赚了2万块!
- 北漂码农的我,把在大城市过成了屯子一样舒服,哈哈哈哈哈!
- 码农会锁,synchronized 对象头结构(mark-word、Klass Pointer)、指针压缩、锁竞争,源码解毒、深度分析!
- 都说搭博客简单,鬼知道后端程序员要经历什么!
- 炸!1024我的故事,一个写了两年博客的大厂码农!
- 几百行代码写个Mybatis,原理搞的透透的!
- 每个程序员都该有个自己的博客,分享我的四种博客搭建教程!
- 一次代码评审,差点过不了试用期!
- 数学,离一个程序员有多近?
- 程序员为什么热衷于造轮子,升职加薪吗?
- 牛掰,在IDEA中,你可以安装小傅哥写的插件了!
- 得物(毒)APP,8位抽奖码需求,这不就是产品给我留的数学作业!
- 90%的程序员,都没用过多线程和锁,怎么成为架构师?
- UML类图还不懂?来看看这版乡村爱情类图,一把学会!
- 开发一个分布式IM(即时通信)系统!
- CRUD搬砖两三年了,怎么阅读Spring源码?
- 小傅哥,一个有“副业”的码农!
- Cloudreve 自建云盘实践,我说了没人能限得了我的容量和速度!
- 半年招聘筛选了400+份简历,告诉你怎么写容易被撩!