redis實戰:redis限制某ip的惡意請求
阿新 • • 發佈:2019-02-04
在我們日常開發工作中,經常會遇到介面被惡意請求的情況,應用redis,我們可以很方便的限制某ip一定時間段內對介面的請求次數。
具體實現程式碼如下:
介面檔案:api.php
<?php require_once 'redis.php'; $ip = $_SERVER['REMOTE_ADDR']; $redis = new iredis(); //如果該ip存在值說明30秒內重複請求了,擋掉 if($redis->get($ip)){ exit('come back later!'); } $testArr = array( 'name' => 'ben', 'age' => 24 ); echo json_encode($testArr); //請求完成後將ip作為鍵值儲存在redis中 $redis->set($ip, true, 30);
redis檔案:redis.php
<?php
class iredis extends Redis
{
public function __construct(){
parent::__construct();
$this->connect('127.0.0.1', '6379');
}
}
還可以擴充套件開來,比如說某個介面呼叫地址限制了介面呼叫次數,如果需要在短時間內多次重複呼叫該介面的話,就可以考慮在第一次請求結束後用redis快取請求結果(最好設定好存活週期,比如說半小時),之後的請求就可以直接從redis中獲取資料了,原理和上面限制ip的原理相似,有興趣的童鞋可以自己寫寫程式碼試驗一下。