Class FixedWindowRateLimiter

java.lang.Object
tech.riemann.nif.web.ratelimit.FixedWindowRateLimiter
All Implemented Interfaces:
RateLimiter

public class FixedWindowRateLimiter extends Object implements RateLimiter
固定窗口限流器

核心思想: 1. 在固定时间窗口内计数 2. 超过阈值则拒绝请求 3. 窗口结束后重置计数

适用场景:简单限流,对精度要求不高的场景

缺点: - 窗口边界可能出现2倍流量(前一个窗口最后1秒 + 后一个窗口第1秒)

Author:
Kerbores(kerbores@riemann.tech)
  • Constructor Details

    • FixedWindowRateLimiter

      public FixedWindowRateLimiter()
    • FixedWindowRateLimiter

      public FixedWindowRateLimiter(int maxKeys)
  • Method Details

    • tryAcquire

      public boolean tryAcquire(String key, double permitsPerSecond)
      Description copied from interface: RateLimiter
      尝试获取许可(默认1秒窗口)
      Specified by:
      tryAcquire in interface RateLimiter
      Parameters:
      key - 限流key
      permitsPerSecond - 每秒允许的请求数
      Returns:
      是否获取成功
    • tryAcquire

      public boolean tryAcquire(String key, int permits, long windowSizeMs)
      Description copied from interface: RateLimiter
      尝试获取许可(自定义时间窗口)
      Specified by:
      tryAcquire in interface RateLimiter
      Parameters:
      key - 限流key
      permits - 时间窗口内允许的请求数
      windowSizeMs - 时间窗口大小(毫秒)
      Returns:
      是否获取成功
    • getAlgorithm

      public RateLimitAlgorithm getAlgorithm()
      Description copied from interface: RateLimiter
      获取支持的限流算法
      Specified by:
      getAlgorithm in interface RateLimiter
      Returns:
      限流算法