12 个不稳定版本 (5 个破坏性更改)
0.6.0 | 2024 年 8 月 1 日 |
---|---|
0.5.0 | 2024 年 5 月 28 日 |
0.4.1 | 2024 年 5 月 10 日 |
0.4.0 | 2023 年 3 月 10 日 |
0.3.2 | 2022 年 7 月 20 日 |
在 算法 中排名第 173
每月下载量 18,097
36KB
779 行 代码
GCRA:基本实现
一个库,它在 Rust 中实现了核心 GCRA 功能。
特性
rate-limiter
一个 LRU + 过期速率限制器。实现Send + Sync
,因此可以异步使用。
用法
use gcra::{RateLimit, RatelimitGuard};
fn check_rate_limit() {
const LIMIT: u32 = 1;
// Create a rate limit that allows `1/1s`
let rate_limit = RateLimit::per_sec(LIMIT);
let mut rate_limit_guard = RateLimitGuard::new_state(rate_limit);
assert!(rate_limit_guard.check_and_modify(1).is_ok());
assert!(
rate_limit_guard.check_and_modify(1).is_err(),
"We should be over the limit now"
);
}
使用 rate-limiter
use std::sync::Arc;
use gcra::{GcraError, RateLimit, RateLimiter};
#[tokio::main]
async fn main() -> Result<(), GcraError> {
let rate_limit = RateLimit::per_sec(2);
let rate_limiter = Arc::new(RateLimiter::new(4));
rate_limiter.check("key", &rate_limit, 1).await?;
rate_limiter.check("key", &rate_limit, 1).await?;
match rate_limiter.check("key", rate_limit.clone(), 1).await {
Err(GcraError::DeniedUntil { next_allowed_at }) => {
print!("Denied: Request next at {:?}", next_allowed_at);
Ok(())
}
unexpected => panic!("Opps something went wrong! {:?}", unexpected),
}
}
依赖项
~0.3–5.5MB
~21K SLoC