Upstash 限流
[!注意] 该项目处于正式发布阶段。 Upstash 专业支持完全覆盖此项目。它会定期更新和修复错误。Upstash 团队致力于维护和改进其功能。
这是唯一一个无连接(基于 HTTP)的限流库,专为以下环境设计:
- 无服务器函数(AWS Lambda、Vercel 等)
- Cloudflare Workers 和 Pages
- Vercel Edge
- Fastly Compute@Edge
- Next.js、Jamstack 等
- 客户端 Web/移动应用程序
- WebAssembly
- 以及其他优先使用 HTTP 而非 TCP 的环境。
快速开始
安装
npm
npm install @upstash/ratelimit
Deno
import { Ratelimit } from "https://cdn.skypack.dev/@upstash/ratelimit@latest";
创建数据库
在 upstash 上创建一个新的 redis 数据库。有关如何创建 redis 实例的文档,请参阅此处。
基本用法
import { Ratelimit } from "@upstash/ratelimit"; // 对于 deno:请参见上文
import { Redis } from "@upstash/redis"; // 有关 cloudflare 和 fastly 适配器,请参见下文
// 创建一个新的限流器,允许每 10 秒内 10 个请求
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"),
analytics: true,
/**
* redis 中使用的键的可选前缀。如果您想与其他应用程序共享 redis 实例并避免键冲突,这很有用。
* 默认前缀是 "@upstash/ratelimit"
*/
prefix: "@upstash/ratelimit",
});
// 使用常量字符串来限制所有请求的单一限流
// 或使用用户 ID、API 密钥或 IP 地址进行单独限制。
const identifier = "api";
const { success } = await ratelimit.limit(identifier);
if (!success) {
return "目前无法处理";
}
doExpensiveCalculation();
return "这是您的结果!";
有关入门的更多信息,您可以参考我们的文档。
文档
有关此包的更多详细信息,请参阅文档。
贡献
数据库
在 upstash 上创建一个新的 redis 数据库,并复制 URL 和令牌。
运行测试
要运行测试,您需要设置一些环境变量。以下是需要设置的变量列表:
UPSTASH_REDIS_REST_URL
UPSTASH_REDIS_REST_TOKEN
US1_UPSTASH_REDIS_REST_URL
US1_UPSTASH_REDIS_REST_TOKEN
APN_UPSTASH_REDIS_REST_URL
APN_UPSTASH_REDIS_REST_TOKEN
EU2_UPSTASH_REDIS_REST_URL
EU2_UPSTASH_REDIS_REST_TOKEN
您可以创建一个单独的 Upstash Redis 实例,并将其 URL 和令牌用于上述所有四个变量。
设置环境变量后,只需运行:
pnpm test