• 首页
  • 博客
  • 项目
  • 留言墙
  • AMA

动态更新

喜欢我的内容的话不妨订阅支持一下 🫶
加入其他 4 位订阅者,每月一封,随时可以取消订阅。

© 2025 AG.

首页博客项目留言墙AMA
总浏览量 3,011
最近访客来自 Columbus, US🇺🇸
  • 什么是 Upstash ?
  • 设置ENV
  • 使用Clerk进行身份验证
  • 创建 Rate Limiter
  • 在路由中实现Rate Limiter
  • 测试 Rate Limiter
  • 总结
在Next.js项目中使用Upstash限流
2023/08/10教程

在Next.js项目中使用Upstash限流

如何在Next.js中限流

48次点击4分钟阅读

限流是 web 应用中十分重要的功能。但在 Next.js 生态中,实现 API 限流是相当容易的。这篇博客我将主要介绍如何使用 Upstash 和 Redis 实现 API 限流.

什么是 Upstash ?

Upstash

Upstash 是一个 serverless 数据堆栈,它可以通过 Redis 或 Qstash 在 edge 为你的网站实现限流. 大部分人更倾向于使用 Redis,主要是 Upstash 的免费计划真的很香. 我将使用 Upstash 来限流,因为它的API使用起来非常简单.

首先,你需要注册一个账户. 完成注册后,点击控制台并创建一个新的数据库. 为其命名,并将区域设置为您所在地区的正确区域(推荐新加坡), 然后创建 Redis .

设置ENV

现在你的 Redis 实例已经创建,还需要在环境变量中设置 Redis REST URL 和token. 你可以从 Upstash 控制台复制这些信息。

API details

现在打开 VSCode 并添加一个 .env 文件在你的主目录下, 如果有跳过这步. 将 Upstash URL 和 token 复制粘贴到文件中。

使用Clerk进行身份验证

如果你之前没有使用过 Clerk,它是一个用户身份验证和管理系统,支持诸如 Next.js、Remix 和 Gatsby 等框架。在我的项目中是用 Clerk 进行用户身份验证和保护路由。

因为为了限流,需要一个用于识别用户的标识符(例如用户ID、IP地址),以确定是否同一用户在发起多个请求. Clerk 中用户的 ID 就可以可以很好的达到目的.

创建 Rate Limiter

首先,我们需要安装两个包,分别是 upstash-rate-limit 和 upstash-redis. 你可以通过运行以下命令进行安装:

然后,在你的路由中导入这两个包并初始化速率限制器:

这个例子设置了每 3 秒内允许的请求次数为 2. 你可以根据需要调整这些值。

在路由中实现Rate Limiter

我将在我项目的路中实现速率限制器. 首先,创建你的路由(此处,我将其称为 expensive). 在路由内部,使用 Clerk 中的用户 ID 来识别并进行速率限制。

上面代码先检查用户请求是否超出了速率限制; 如果是,就会抛出错误.

测试 Rate Limiter

实现限流后,你可以测试下所限流的路由, 确保速率限制正常工作。我是在网页上加了个按钮来测试速率限制器。

之后便运行 npm run dev ,然后导航到本地主机 URL。 单击该按钮,使用 Clerk 登录,然后会被重定向到受保护的页面。 打开浏览器控制台并刷新页面, 当你刷新过于频繁,就会显示“ TOO_MANY_REQUESTS ”错误。

如果等待几秒钟再刷新,错误应该会消失,表明网站限流成功。

总结

可以看到使用 Upstash 和 Redis 实现限流,非常容易。但这种猫和老鼠的游戏,其实也没有一劳永逸的办法,最后还是得在自己的服务端做好安全防护

相关文章

使用React Query实现无限滚动

2023/10/25教程705分钟阅读

如何快速定位导致水平滚动的元素

2023/06/07教程411分钟阅读

约定式提交指南

2022/12/09教程314分钟阅读