VercelKV(键值存储) vercel-kv

Vercel KV 是一个 Redis 兼容的键值存储服务,专为 Vercel 平台设计,用于 Next.js 缓存、会话管理、速率限制、TTL 数据存储等场景。它提供高一致性,支持边缘运行时,适用于服务器端应用,常用于缓存、分布式锁、排行榜等模式。关键词:Vercel KV、键值存储、Redis、缓存、服务器端、边缘计算、Next.js、速率限制、会话管理。

Serverless 0 次安装 0 次浏览 更新于 3/7/2026

name: vercel-kv description: Vercel KV(通过Upstash实现的Redis兼容键值存储)。用于Next.js缓存、会话、速率限制、TTL数据存储,或解决KV_REST_API_URL错误、速率限制问题、JSON序列化错误。提供强一致性而非最终一致性。

关键词:vercel kv、@vercel/kv、vercel redis、upstash vercel、kv vercel、redis vercel edge、key-value vercel、vercel cache、vercel sessions、vercel rate limit、redis upstash、kv storage、edge kv、serverless redis、vercel ttl、vercel expire、kv typescript、next.js kv、server actions kv、edge runtime kv license: MIT

Vercel KV(Redis兼容存储)

状态:生产就绪 最后更新:2025-12-14 依赖项:无 最新版本@vercel/kv@3.0.0


快速开始(3分钟)

1. 创建与配置

# 在Vercel仪表板中创建KV数据库:存储 → 创建数据库 → KV
vercel env pull .env.local

创建环境变量:

  • KV_REST_API_URL - 您的KV数据库URL
  • KV_REST_API_TOKEN - 认证令牌

2. 安装

bun add @vercel/kv

3. 在应用中

Next.js服务器操作:

'use server';

import { kv } from '@vercel/kv';

export async function incrementViews(slug: string) {
  const views = await kv.incr(`views:${slug}`);
  return views;
}

边缘API路由:

import { kv } from '@vercel/kv';

export const runtime = 'edge';

export async function GET(request: Request) {
  const value = await kv.get('mykey');
  return Response.json({ value });
}

关键规则

始终执行

规则 原因
为临时数据设置TTL setex('key', 3600, value) - 避免内存泄漏
使用命名空间键 user:123:profile 而不是 123 - 防止冲突
处理空返回 不存在的键返回 null
使用管道进行批量操作 单次往返减少延迟
仅序列化JSON兼容数据 不使用函数、循环引用
监控命令使用 保持在免费层内(30K/月)

绝不执行

规则 原因
存储未加密的敏感数据 KV默认未加密存储
忘记设置TTL 无TTL的键永久保留
使用通用键名 datacache 会冲突
存储大值(>1MB) 改用Vercel Blob
用作主数据库 KV用于缓存,非持久存储
提交 .env.local 包含KV令牌

核心操作

带TTL的设置/获取:

import { kv } from '@vercel/kv';

// 设置带TTL(1小时后过期)
await kv.setex('session:abc', 3600, { userId: 123 });

// 获取值
const session = await kv.get('session:abc');

// 删除
await kv.del('session:abc');

原子操作:

const views = await kv.incr('views:post:123');
const wasSet = await kv.setnx('lock:process', 'running'); // 如果不存在则设置

多键操作:

const values = await kv.mget('user:1', 'user:2', 'user:3');
await kv.mset({ 'user:1': data1, 'user:2': data2 });

已知问题预防

本技能预防10个文档问题

# 错误 快速修复
1 KV_REST_API_URL 未定义 运行 vercel env pull .env.local
2 无法序列化 BigInt 转换为字符串,使用普通对象
3 意外数据返回 使用命名空间键:user:123:profile
4 内存无限增长 使用带TTL的 setex()
5 速率限制超出 批量操作,升级计划
6 值过大 使用Vercel Blob处理 >100KB
7 TypeScript类型错误 使用 kv.get<Type>() 配合Zod验证
8 管道静默失败 检查来自 exec() 的结果数组
9 扫描超时错误 限制计数,使用游标迭代
10 会话过早过期 使用 expire() 实现滑动窗口

参见references/known-issues.md 获取带代码示例的完整解决方案。


常见模式总结

模式 使用案例 关键API
缓存旁路 读缓存 get → 获取 → setex
直写缓存 写一致性 写入时 setex,删除时 del
速率限制 API保护 incr + expire
会话管理 用户会话 setexgetexpiredel
分布式锁 并发控制 setnx + expire + del
排行榜 排名 zaddzrangezrevrank
管道 批量操作 pipeline().exec()

参见references/common-patterns.md 获取完整实现。


配置

.env.local

# 由以下命令创建:vercel env pull .env.local
KV_REST_API_URL="https://your-database.kv.vercel-storage.com"
KV_REST_API_TOKEN="your-token-here"

.gitignore

.env.local
.env*.local

何时加载参考

参考 加载时机…
references/known-issues.md 调试KV错误、类型问题或性能问题
references/common-patterns.md 实现缓存、会话、速率限制、排行榜或锁

依赖项

{
  "dependencies": {
    "@vercel/kv": "^3.0.0"
  }
}

免费层限制:30,000条命令/月,256MB存储


官方文档


故障排除

问题 解决方案
KV_REST_API_URL 未定义 运行 vercel env pull .env.local
速率限制超出 使用 mget/管道,升级计划
值未过期 使用 setex() 而非 set()
JSON序列化错误 使用普通对象,将BigInt转换为字符串

令牌节省:约60%(模式提取到参考) 错误预防:100%(所有10个文档问题) 准备生产!