文心一言是百度提供的一個免費中文句子API,每日請求上限為1000次。儘管如此,仍有很多應用在高頻調用過程中容易突破該限制,從而觸發超限或被臨時屏蔽。
頻繁或突發的大量請求可能導致服務不可用,甚至影響同一平台上的其他用戶。因此,在開發中合理限制請求次數和流量,能有效保障API的可用性和穩定性。
在PHP中,我們可以通過Redis記錄並判斷單個用戶的請求頻率,實現每日請求次數的限制。下面是一個典型的代碼示例:
// 連接Redis伺服器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 獲取用戶IP和當前日期
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
// 構建Redis鍵名
$key = $ip . '-' . $date;
$count = $redis->get($key);
if (!$count) {
// 第一次請求,初始化計數並設置過期時間
$redis->set($key, 1);
$redis->expire($key, 86400);
} else {
if ($count >= 1000) {
echo '請求次數超限';
exit;
}
// 增加計數
$redis->incr($key);
$redis->expire($key, 86400);
}
// 請求文心一言API
$url = 'https://v1.alapi.cn/api/shici?format=text';
$response = file_get_contents($url);
echo $response;
除了應用層的限流,還可以藉助NGINX在服務層對請求速率做限制,避免短時間高並發造成壓力。示例如下:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
server {
...
location / {
limit_req zone=one burst=5 nodelay;
proxy_pass ...;
}
}
上述配置含義如下:
通過PHP結合Redis進行請求限流,配合NGINX進行流量控制,是保障API穩定運行的有效方式。本文以百度文心一言API為例,提供了實際的實現代碼與配置建議。類似的做法也可應用於其他高頻調用的開放接口,開發者應根據業務需求合理設置限流策略。