# 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.