redis限制单ip、单用户的访问次数

本文介绍了一种利用Redis来限制API或网页访问频率的方法,通过记录每个IP地址的访问次数,并设置每分钟访问上限来防止过度访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次 
类似于这样的需求很容易用Redis来实现

[php]  view plain  copy
  1. <?php    
  2. $redis = new Redis();    
  3. $redis->connect('127.0.0.1', 6379);   
  4. $redis->auth("php001");  
  5. //这个key记录该ip的访问次数 也可改成用户id   
  6. //$key = 'userid_11100';  
  7. $key=get_real_ip();  
  8.   
  9. //限制次数为5  
  10. $limit = 5;  
  11.   
  12. $check = $redis->exists($key);  
  13. if($check){  
  14.     $redis->incr($key);  
  15.     $count = $redis->get($key);  
  16.     if($count > 5){  
  17.         exit('请求太频繁,请稍后再试!');  
  18.     }  
  19. }else{  
  20.     $redis->incr($key);  
  21.     //限制时间为60秒   
  22.     $redis->expire($key,60);  
  23. }  
  24.   
  25. $count = $redis->get($key);  
  26. echo '第 '.$count.' 次请求';  
  27.   
  28. //获取客户端真实ip地址  
  29. function get_real_ip(){  
  30.     static $realip;  
  31.     if(isset($_SERVER)){  
  32.         if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){  
  33.             $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];  
  34.         }else if(isset($_SERVER['HTTP_CLIENT_IP'])){  
  35.             $realip=$_SERVER['HTTP_CLIENT_IP'];  
  36.         }else{  
  37.             $realip=$_SERVER['REMOTE_ADDR'];  
  38.         }  
  39.     }else{  
  40.         if(getenv('HTTP_X_FORWARDED_FOR')){  
  41.             $realip=getenv('HTTP_X_FORWARDED_FOR');  
  42.         }else if(getenv('HTTP_CLIENT_IP')){  
  43.             $realip=getenv('HTTP_CLIENT_IP');  
  44.         }else{  
  45.             $realip=getenv('REMOTE_ADDR');  
  46.         }  
  47.     }  
  48.     return $realip;  
  49. }  
  50. ?>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值