3个不稳定版本
0.1.0 | 2023年7月30日 |
---|---|
0.0.2 | 2023年7月29日 |
0.0.1 | 2023年7月29日 |
#1019 in 并发
15KB
190 行
使用Rhythm进行速率限制
Rhythm的RateLimiter
是一个用Rust实现的线程安全的速率限制库。它允许您通过将操作与键关联来限制操作的速率,例如对服务器的请求。每个键都有一个“桶”的令牌,每个操作消耗一个令牌。当桶为空时,操作将被限制。
特性
- 线程安全:Rhythm的速率限制器使用
Mutex
来确保它可以从多个线程安全地使用。 - 可定制:您可以调整默认的桶大小、填充速率和填充间隔。
- 每个键限制:Rhythm引入了VIP的概念,他们有自己的可调限制。这允许对每个个体的限制进行细粒度控制。
使用方法
首先,创建一个新的RateLimiter
,调整到您的用例
let rate_limiter: RateLimiter<MyKeyType> = RateLimiter::new(
bucket_size,
refill_rate,
refill_interval
);
然后,使用request
方法执行操作
if rate_limiter.request(my_key) {
// The operation is allowed.
} else {
// The operation is not allowed.
}
在这个例子中,my_key
是与操作关联的键。如果操作被允许(即,与键关联的桶不为空),则request
方法返回true
,否则返回false
。
默认情况下,所有键都将具有速率限制器的默认桶大小、填充速率和填充间隔。
要自定义此设置,您可以将一个键标记为VIP
rate_limiter.set_vip(
vip_key.clone(),
vip_bucket_size,
vip_refill_rate
);
安装
将以下内容添加到您的Cargo.toml中
运行cargo add rhythm
将最新版本添加到您的Cargo.toml
。
然后,运行cargo build
来构建您的项目。
待办事项
性能改进
- 每个桶的互斥锁,以避免每个请求都持有表锁。
- 将修剪移动到LRU缓存样式的修剪。
功能改进
- VIP桶应该能够设置自己的填充间隔。
许可证
Rhythm的速率限制器根据MIT许可证授权。有关更多信息,请参阅LICENSE。