限流策略指的是一种通过限制系统请求或者流量数量的方法,以防止系统的过载或崩溃。常见的限流策略包括:
-
计数器限流:设置一个阈值,每次请求都将计数器加一,当计数器达到阈值时,拒绝后续请求或者将请求放入队列中,等待处理。
-
令牌桶限流:通过维护一个令牌桶,限制系统的请求流量。令牌桶中存放着一定数量的令牌,每次请求需要获取一个令牌,当令牌桶中的令牌用尽时,拒绝后续请求或将请求放入队列中等待处理。同时,每隔一段时间会往令牌桶中放入一定数量的令牌。
-
漏桶限流:类似于令牌桶限流,不同的是漏桶不是令牌,而是通过固定速率将请求处理,当请求流量超过漏桶处理速率时,多余的请求将被拒绝或者放入队列中等待处理。
-
基于时间窗口的限流:通过设置一个时间窗口,例如每秒钟只允许处理一定数量的请求,当请求超过阈值时,拒绝后续请求或将请求放入队列中等待处理。时间窗口的长度和阈值可以根据实际情况进行调整。
下面通过代码demo展示基于时间窗口限流策略:单位时间内限定访问数量
/*
基于时间窗口的限流算法是一种常见的限流技术,
它通过限制在指定时间窗口内的请求数量来控制系统的并发请求量。
该算法可以灵活地控制请求的速率,通常用于对接口请求进行限流。
*/
public class TimeWindowLimiter {
private int limit; //