3 个稳定版本
1.0.2 | 2024 年 3 月 30 日 |
---|---|
1.0.1 | 2024 年 3 月 23 日 |
1.0.0 | 2024 年 3 月 22 日 |
#2 在 #ratelimit 中
每月 121 次下载
25KB
392 行
非官方的 Rust Upstash 速率限制 SDK
为 Rust 生态系统构建的内存数据存储速率限制 SDK
灵感来源
此速率限制 SDK 受 Upstash 团队创建的官方 TypeScript 速率限制 SDK 的启发。
设置
- 要设置速率限制器,首先创建一个 Redis 客户端实例,该实例可以存储给定窗口内的请求计数
let connection_str = std::env::var("UPSTASH_REDIS_URL").unwrap_or_else(|_| panic!("Expecting UPSTASH_REDIS_URL to be set"));
let Ok(redis) = redis::Client::open(connection_str) else {
panic!("Failed to connect")
};
-
使用 Redis 客户端创建一个
RatelimitConfiguration
实例 -
使用客户端配置创建三个速率限制算法中的任何一个的新实例
例如:使用固定窗口算法限制 30 秒窗口内的 10 个请求。
let client = RatelimitConfiguration::new(redis, true, Some(String::from("my-custom-prefix")));
let ratelimit = FixedWindow::new(client, 10, "30s");
在上面的客户端配置中,使用临时缓存以避免在请求已被阻止时调用 Redis,并添加自定义前缀字符串将覆盖默认前缀字符串
使用 ratelimit
实例在请求调用中调用限制函数以对您的请求进行速率限制
let limit_response = state.ratelimit.limit("some-unique-identifier-like-ip", None).await;
自定义速率
默认情况下,每个算法在每个请求中消耗一个令牌,但如果您要根据有效负载大小或其他任何因素对请求进行速率限制,则可以通过将速率值提供给限制函数调用来实现
let limit_response = state.ratelimit.limit("some-unique-identifier-like-ip", Some(10)).await;
这将消耗一个请求中的 10 个令牌。
示例
查看 示例 目录
路线图
-
单个区域(可能存在延迟问题)
- 固定窗口算法 ✅
- 滑动窗口算法 ✅
- 令牌桶算法 ✅
- 缓存固定窗口算法 🛠️
- 分析 🛠️
- 强制超时 🛠️
- 硬重置 🛠️
-
多个区域(无延迟问题)
- 固定窗口算法 🛠️
- 滑动窗口算法 🛠️
依赖项
~9–20MB
~277K SLoC