這篇文章主要介紹PHP接口訪問頻率限制的示例,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
發現網上很多限制都只是1分鐘(或者某個時間)內訪問的限制。
比如1分鐘限制10次 那我在59秒的訪問了10次,然后key 又過期了,接下來1分鐘又可以訪問了 。這種限制根本就不合理。
所以有了我的想法。
直接上代碼吧。
/**
* @param $uid
* @return bool|int
* 檢測用戶接口訪問頻率
*/
function api_frequency_visits ($uid) {
$key = "user:{$uid}:api:frequency";
$redis = new Redis();
$redis->connect('127.0.0.1');
$data = $redis->hGetAll($key);
//需要刪除的key
$del_key = [];
//時間內訪問的總次數
$total = 0;
//時間內最大訪問次數
$max_frequency = 10;
//當前時間
$now_time = time();
//限制時間
$limit_time = 60;
foreach ($data as $time=>$count) {
if ($time < $now_time - $limit_time) {
$del_key[] = $time;
} else {
$total += $count;
}
}
//存在需要刪除的key
if ($del_key) {
$redis->hDel($key, ...$del_key);
}
if ($total >= $max_frequency) {
return false;
}
return $redis->hIncrBy($key, $now_time, 1);
}
$uid = 1;
$result = api_frequency_visits($uid);
if (!$result) {
echo json_encode(['code'=>0, 'msg'=>'操作過于頻繁', 'data'=>[]]);die;
}
echo json_encode(['code'=>1, 'msg'=>'', 'data'=>[
'uid'=>$uid,
'other'=>rand()
]]);die;限制時間,限制次數這些都可以修改,包括根據用戶id也可以換成自己想要的限制,比如IP等。
key過期時間也是可以添加的。
以上是“PHP接口訪問頻率限制的示例”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。