java滑动窗口算法限流实现代码
时间: 2024-08-02 15:01:27 浏览: 134
滑动窗口算法在Java中常用于限流场景,例如分布式系统中的流量控制,防止短时间内请求过于频繁。这里我们可以使用一个固定大小的窗口(队列)来实现,超过窗口大小限制的请求会被丢弃。下面是一个简单的Java实现示例:
```java
import java.util.LinkedList;
import java.util.Queue;
public class SlidingWindowRateLimiter {
private final int maxRequestsInWindow;
private final Queue<Long> requestTimestamps;
public SlidingWindowRateLimiter(int maxRequestsInWindow) {
this.maxRequestsInWindow = maxRequestsInWindow;
this.requestTimestamps = new LinkedList<>();
}
public boolean allowRequest() {
long currentTime = System.currentTimeMillis();
// 如果队列已满,尝试移除最早的时间戳
if (requestTimestamps.size() >= maxRequestsInWindow) {
requestTimestamps.poll();
}
// 添加新的时间戳,并检查是否超过了最大允许请求次数
requestTimestamps.offer(currentTime);
return requestTimestamps.size() <= maxRequestsInWindow;
}
}
```
在这个例子中,`allowRequest`方法会检查当前时间是否允许新请求进入。如果队列已满,它会移除最早的一个时间戳(模拟请求完成)。如果队列未满并且新请求仍在限制范围内,就添加并返回true;否则返回false。
阅读全文