高併發接口限流解決實現相關技術指南

       系統在網絡環境上線後,網站的安全性是開發及運維需要考慮的重要問題,這裏我們談到的是防止黑客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次後顯示如下

 

接口限流成功。

 

持續完善,待續...

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章