// 连接 Redis
$redis = new Redis();
$redis->connect(‘localhost’, 6379);
// 设置限制访问的时间窗口和最大请求数
$time_window = 10; // 时间窗口为 10 秒
$max_requests = 15; // 最大请求数为 100
// 获取客户端 IP 地址
$ip = $_SERVER[‘REMOTE_ADDR’];
// 生成 Redis 键名
$key = ‘access_limit:’ . $ip;
// 获取当前时间戳
$current_time = time();
// 获取该 IP 在时间窗口内的请求数
$request_count = $redis->get($key);
// 如果请求数为空或者超过最大请求数,则返回错误信息
// $request_count === false ||
if ($request_count > $max_requests) {
sleep(30);
// http_response_code(429); // 返回 429 Too Many Requests 错误码
// echo “请求过于频繁,请稍后再试!”;
// exit();
}
// 增加该 IP 的请求数,并设置过期时间为时间窗口结束时
$redis->multi();
$redis->incr($key);
$redis->expireat($key, $current_time + $time_window);
$redis->exec();
正文完