在现代 Web 开发中,性能优化至关重要。缓存是提升应用响应速度、降低后端负载的常用手段。然而,传统缓存方案(如自建 Redis 服务器)往往需要运维成本和复杂的部署流程。
本文将带你使用 VercelUpstash Redis 快速搭建一个轻量、无服务器(Serverless)的加速缓存服务,适用于 API 响应缓存、页面静态化、用户会话存储等场景。


为什么选择 Vercel + Upstash?

  • Vercel:领先的前端部署平台,支持 Serverless Functions、Edge Functions,自动全球 CDN 加速。
  • Upstash Redis:专为 Serverless 架构设计的 Redis 服务,按请求计费、低延迟、无需管理连接池,完美适配 Vercel 的无状态函数模型。

两者结合,可以实现“零运维、高可用、全球低延迟”的缓存服务。


第一步:创建 Upstash Redis 数据库

  1. 访问 https://upstash.com 并注册账号。
  2. 进入控制台,点击 Create Database
  3. 选择区域(建议选离你用户最近的,或使用 Global Database 实现多区域同步)。
  4. 创建完成后,你会获得:
    • REST URL
    • Token(用于认证)

⚠️ 注意:Upstash 提供 REST API 接口访问 Redis,非常适合 Serverless 环境,避免了 TCP 连接池问题。


第二步:在 Vercel 中设置环境变量

进入你的 Vercel 项目 → Settings → Environment Variables,添加:

1
2
3
UPSTASH_REDIS_REST_URL = https://xxxxx.upstash.io
UPSTASH_REDIS_REST_TOKEN = your-token-here

确保这些变量在部署时可用。


第三步:编写缓存逻辑(Node.js 示例)

我们以一个简单的 API 路由为例:缓存 GitHub 用户信息。

安装依赖

1
2
npm install @upstash/redis

创建 API 路由(pages/api/user/[username].js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { Redis } from '@upstash/redis';

const redis = new Redis({
url: process.env.UPSTASH_REDIS_REST_URL,
token: process.env.UPSTASH_REDIS_REST_TOKEN,
});

export default async function handler(req, res) {
const { username } = req.query;

// 尝试从缓存读取
const cached = await redis.get(`user:${username}`);
if (cached) {
console.log('Cache hit');
return res.status(200).json({ source: 'cache', data: cached });
}

// 缓存未命中,请求 GitHub API
console.log('Cache miss, fetching from GitHub');
const githubRes = await fetch(`https://api.github.com/users/${username}`);
const userData = await githubRes.json();

if (!githubRes.ok) {
return res.status(githubRes.status).json({ error: 'User not found' });
}

// 写入缓存,有效期 5 分钟
await redis.setex(`user:${username}`, 300, userData);

res.status(200).json({ source: 'github', data: userData });
}


第四步:部署到 Vercel

只需 git push 到关联的仓库,Vercel 会自动构建并部署。

测试接口:

1
2
GET https://your-app.vercel.app/api/user/octocat

首次访问会调用 GitHub API 并缓存结果;后续 5 分钟内访问将直接返回缓存数据。


进阶技巧

1. 使用 Edge Functions 降低延迟

Vercel 的 Edge Functions 运行在全球边缘节点,配合 Upstash 的全球数据库,可实现毫秒级响应。

只需将文件放在 app/api/.../route.ts(Next.js App Router),并导出 runtime: 'edge'

1
2
3
4
5
6
export const runtime = 'edge';

export async function GET(request: Request, { params }: { params: { username: string } }) {
// 同上逻辑,但运行在边缘
}

2. 缓存策略优化

  • 对频繁变化的数据:缩短 TTL(如 60 秒)
  • 对静态内容:延长 TTL(如 1 小时)
  • 使用 redis.del() 主动失效缓存(如用户更新资料后)

3. 监控与成本控制

Upstash 按请求次数计费(免费额度足够个人项目)。可在控制台查看用量,设置警报。


总结

通过 Vercel + Upstash Redis,我们仅用几十行代码就搭建了一个高性能、全球分布的缓存服务。这种组合特别适合:

  • Next.js / Nuxt 等现代框架项目
  • 需要缓存第三方 API 响应的场景
  • 无服务器架构下的状态共享(如限流、会话)

无需担心 Redis 连接、扩容、备份等问题,真正实现“专注业务,缓存无忧”。


参考链接

如果你觉得这篇文章有帮助,欢迎点赞、分享,或在评论区留下你的实践心得!