package
0.0.0-20240831063341-b330716dbd65
Repository: https://github.com/alan-333333/go-channel-patterns.git
Documentation: pkg.go.dev

# README

Sliding Window Rate Limiter

该包实现了基于滑动窗口的限流算法。

特性

  • 将时间窗口分多个桶,根据桶内计数限流

  • 滑动窗口,重置统计

  • 支持设置窗口和桶的时间大小

  • 获取任意时间范围内的请求数

  • 简单易用

示例

sw := window.New(10*time.Second, 1*time.Second, 10) 

if !sw.Allow() {
  // 限流逻辑
}

count := sw.Count(5*time.Second) // 最近5秒请求数

接口

  • New 创建滑动窗口,传入窗口大小,桶大小和桶数

  • Allow 处理请求,检查是否限流

  • Count 获取时间范围内请求数

  • Reset 重置所有桶的计数

实现原理

  • 将时间窗口均分为多个桶

  • 每个桶记录一段时间内的请求数

  • 滑动窗口,旧桶重置计数

  • 汇总多个桶的计数得出时间范围内请求数

优点

  • 精确限流时间范围内请求率

  • 记录少量数据,内存占用低

  • 滑动窗口,限流平滑自然

# Functions

NewSlidingWindow creates a new sliding window with the given window size, bucket size and bucket count.

# Structs

SlidingWindow implements a fixed-size sliding window for rate limiting.