高并发接口限流解决实现相关技术指南

       系统在网络环境上线后,网站的安全性是开发及运维需要考虑的重要问题,这里我们谈到的是防止黑客DDOS攻击,进行接口限流的解决方案。

Redis实现接口限流解决方案

redis的安装及php扩展可参见:https://mp.csdn.net/postedit/89470966

本机的调试环境在上文中windows安装及redis服务器启动都已谈过。

需求分析:我们可以根据访问ip地址,在一定时间内访问次数过多,我们可以屏蔽访问

简单实现方案1

10秒一个ip地址只能访问5次

<?php
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$ip = $_SERVER['REMOTE_ADDR'];
//10秒一个ip地址只能访问5次
$limits=5;
$check=$redis->exists($ip);
if($check){
 $num=$redis->incr($ip);
 if($num>$limits){
   exit("请求太频繁,请稍后再试.");
 }
}else{
  //第一次访问,增加访问次数
  $num=$redis->incr($ip);
  //设置生存时间 过期时间
  $redis->expire($ip,10);
}

$num =$redis->get($ip);
echo "第".$num."次请求";

 

<?php
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$ip = $_SERVER['REMOTE_ADDR'];
//10秒一个ip地址只能访问5次
//$redis->del(#ip);
$limits=5;

if($redis->lLen($ip)<$limits){
  $redis->lPush($ip,time());
  $redis->expire($ip,10);
  echo "正常访问";
}else{
  $lasttime=$redis->lIndex($ip,0);
  if(time()-$lasttime<10){
    exit("请求太频繁,请稍后再试.");
  }
}

 浏览器访问

10s内访问超过5次后显示如下

 

接口限流成功。

 

持续完善,待续...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云焰

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值