1. 程式人生 > >redis實戰:redis限制某ip的惡意請求

redis實戰:redis限制某ip的惡意請求

在我們日常開發工作中,經常會遇到介面被惡意請求的情況,應用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的原理相似,有興趣的童鞋可以自己寫寫程式碼試驗一下。