mcpField
V
vercel-kv

vercel-kv

github.com/secondsky数据与数据库240123 次安装5 周前更新
代码仓库

关于 vercel-kv

介绍如何在应用中使用 Redis 兼容存储服务 Vercel KV 的开发技能,涵盖基本操作,以及缓存、会话、限流、锁和排行榜等常见模式。

主要功能

  1. 01Redis 兼容的键值操作
  2. 02基于 TTL 的过期设置与原子命令
  3. 03多键和 pipeline 操作
  4. 04缓存、会话和限流模式
  5. 05故障排查与配置指引

适用场景

  1. 01缓存应用数据
  2. 02管理带过期时间的用户会话
  3. 03实施 API 限流
  4. 04使用分布式锁协调并发任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/secondsky/claude-skills --skill vercel-kv

安装后在 Claude Code 中输入/vercel-kv确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
example-template.txt
references/
common-patterns.md
known-issues.md
scripts/
example-script.sh
templates/
package.json
session-management.ts
simple-rate-limiting.ts

详细介绍

Vercel KV(兼容 Redis 的存储)

状态:已可用于生产环境 最后更新:2025-12-14 依赖项:无 最新版本:@vercel/[email protected]


快速开始(3 分钟)

1. 创建并配置
# Create KV database in Vercel dashboard: Storage → Create Database → 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;
}

Edge 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 });
}

关键规则

始终执行
规则原因
为临时数据设置 TTLsetex('key', 3600, value) - 避免内存泄漏
使用带命名空间的键使用 user:123:profile,而非 123 - 防止冲突
处理 null 返回值不存在的键会返回 null
使用 pipeline 批量操作单次往返可降低延迟
仅序列化兼容 JSON 的数据不支持函数和循环引用
监控命令用量确保不超出免费层级(每月 30K)
绝不执行
规则原因
不加密就存储敏感数据默认情况下,KV 的静态数据未经加密
忘记设置 TTL未设置 TTL 的键会永久保留
使用通用键名data、cache 会发生冲突
存储较大的值(>1MB)请改用 Vercel Blob
将其用作主数据库KV 用于缓存,而非持久化存储
提交 .env.local其中包含 KV 令牌

核心操作

设置/获取并设置 TTL:

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

// Set with TTL (expires in 1 hour)
await kv.setex('session:abc', 3600, { userId: 123 });

// Get value
const session = await kv.get('session:abc');

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

原子操作:

const views = await kv.incr('views:post:123');
const wasSet = await kv.setnx('lock:process', 'running'); // Set if not exists

多个键:

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

预防已知问题

此技能可预防 10 个已记录的问题:

#错误快速修复
1KV_REST_API_URL not defined运行 vercel env pull .env.local
2Cannot serialize BigInt转换为字符串,并使用普通对象
3返回了意外数据使用带命名空间的键:user:123:profile
4内存持续增长使用带 TTL 的 setex()
5超出速率限制批量操作,或升级套餐
6值过大对于 >100KB 的值,请使用 Vercel Blob
7TypeScript 类型错误使用 kv.get<Type>() 并通过 Zod 验证
8Pipeline 静默失败检查 exec() 返回的结果数组
9Scan 超时错误限制数量,并使用游标迭代
10会话过早过期使用 expire() 实现滑动窗口

请参阅:references/known-issues.md,查看包含代码示例的完整解决方案。


常见模式摘要

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

请参阅:references/common-patterns.md,查看完整实现。


配置

.env.local
# Created by: 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 not defined运行 vercel env pull .env.local
超出速率限制使用 mget/pipeline,升级套餐
值未过期使用 setex(),而不是 set()
JSON 序列化错误使用普通对象,将 BigInt 转换为字符串

节省 Token:约 60%(将模式提取到参考资料中) 错误预防:100%(记录了全部 10 个问题) 已可用于生产环境!

评论

支持 Markdown