限流
令牌桶算法的原理是系统会以一个恒定的速率往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。但桶满时,新添加的令牌被丢弃或拒绝。
优点:能处理瞬间增大的流量,比如现在正常情况下每秒产生5个令牌,在预制了5个令牌,如果一瞬间流量为8个令牌,首先这一秒正常能生成5个令牌,在加上预制了5个令牌,所以可以处理这个瞬间流量
RateLimiter rateLimiter = LIMIT_MAP.get(limit.key()); if (Objects.isNull(rateLimiter)) { rateLimiter = RateLimiter.create(limit.permits()); LIMIT_MAP.putIfAbsent(limit.key(), rateLimiter); } boolean passed = rateLimiter.tryAcquire(300, TimeUnit.MILLISECONDS);