1 个不稳定版本
0.1.0 | 2023年7月7日 |
---|
#4 在 #upstash
9KB
151 行
Redis 支持的速率限制
这个库受 Upstash 速率限制 库的启发,并设计为与其兼容。这意味着多个 JavaScript 和 Rust 服务可以在相同的 Redis 键上运行并使用相同的速率限制算法。
入门
添加依赖
cargo add upstash-ratelimit
使用 upstash_ratelimit
use upstash_ratelimit::{Limiter, RateLimit, Response};
let redis = redis::Client::open("redis://127.0.0.1/")?;
let ratelimit = RateLimit::builder()
.redis(REDIS.clone())
.limiter(Limiter::FixedWindow {
tokens: 30,
window: Duration::from_millis(100),
})
.build()?;
let response = ratelimit.limit("unique-id");
match result {
Response::Success { .. } => println!("Allow!")
Response::Failure { .. } => println!("Rate limited!")
}
运行单元测试
在运行 cargo test
之前,在 localhost
上启动 Redis 实例,使用 docker-compose up -d
。在测试运行之间重新启动 Redis 是一个好主意。
功能支持
- 单区域 Redis
- 多区域 Redis
- 固定窗口限制
- 滑动窗口限制
- 令牌桶限制
- 缓存的固定窗口限制
- 任意键前缀
- 临时(内存中)缓存
- 等待直到就绪
- HTTP Redis 连接
- 这需要大量工作,可能应该位于单独的库中。
- 分析
- 这需要大量工作,可能应该位于单独的库中。
依赖关系
~3MB
~83K SLoC