Class SlidingWindowRateLimiter

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

public class SlidingWindowRateLimiter extends Object implements RateLimiter
滑动窗口限流器

核心思想: 1. 将时间划分为多个小窗口(默认10个子窗口,每个100ms) 2. 统计最近N个子窗口内的请求总数 3. 超过阈值则拒绝请求

适用场景:需要精确控制请求速率的场景,避免固定窗口的边界问题

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

    • SlidingWindowRateLimiter

      public SlidingWindowRateLimiter()
    • SlidingWindowRateLimiter

      public SlidingWindowRateLimiter(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:
      限流算法