Workers KV 为你的 Cloudflare Workers 应用提供低延迟、高吞吐量的全球存储。Workers KV 非常适合存储用户配置数据、路由数据、A/B 测试配置和身份验证令牌,且适合读取密集型工作负载。
本指南将指导你完成:
- 创建 KV 命名空间。
- 从 Cloudflare Worker 向 KV 命名空间写入键值对。
- 从 KV 命名空间读取键值对。
你可以通过 Wrangler CLI 或 Cloudflare 仪表板执行这些任务。
如果你想跳过设置步骤并快速开始,请点击下面的按钮。
这会在你的 GitHub 账户中创建仓库并将应用部署到 Cloudflare Workers。如果你熟悉 Cloudflare Workers 并希望跳过逐步指导,请使用此选项。
如果你是 Cloudflare Workers 新手,你可能希望手动按照步骤操作。
- 注册 Cloudflare 账户 ↗。
- 安装
Node.js↗。
Node.js 版本管理器
使用 Volta ↗ 或 nvm ↗ 等 Node 版本管理器,以避免权限问题并切换 Node.js 版本。本指南后续将介绍的 Wrangler 需要 Node 版本 16.17.0 或更高。
创建新的 Worker 以读写 KV 命名空间。
-
运行以下命令创建名为
kv-tutorial的新项目:npm create cloudflare@latest -- kv-tutorialyarn create cloudflare kv-tutorialpnpm create cloudflare@latest kv-tutorial进行设置时,请选择以下选项:
- 对于 What would you like to start with?,选择
Hello World example。 - 对于 Which template would you like to use?,选择
Worker only。 - 对于 Which language do you want to use?,选择
TypeScript。 - 对于 Do you want to use git for version control?,选择
Yes。 - 对于 Do you want to deploy your application?,选择
No(部署前我们还会做一些修改)。
这将创建新的
kv-tutorial目录,如下所示。- kv-tutorial/
- node_modules/
- test/
- src
- index.ts
- package-lock.json
- package.json
- testconfig.json
- vitest.config.mts
- worker-configuration.d.ts
- wrangler.jsonc
新的
kv-tutorial目录包括:index.ts中的"Hello World"Worker。wrangler.jsonc配置文件。wrangler.jsonc是kv-tutorialWorker 访问 kv 数据库的方式。
- 对于 What would you like to start with?,选择
-
进入你刚为 Worker 项目创建的目录:
cd kv-tutorial
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
选择 Create application(创建应用程序)。
-
选择 Start with Hello World!(从 Hello World 开始!) > Get started(开始使用)。
-
命名 Worker。在本教程中,将 Worker 命名为
kv-tutorial。 -
选择 Deploy(部署)。
KV 命名空间 是复制到 Cloudflare 全球网络的键值数据库。
你可以使用 Wrangler 创建新的 KV 命名空间。你也可以使用它在 KV 命名空间内执行 put、list、get 和 delete 等操作。
通过 Wrangler 创建 KV 命名空间:
-
打开终端并运行以下命令:
npx wrangler kv namespace create <BINDING_NAME>npx wrangler kv namespace create <BINDING_NAME>子命令将新的绑定(binding)名称作为参数。KV 命名空间使用 Worker 名称(来自 Wrangler 文件)和你提供的绑定(binding)名称的拼接创建。<BINDING_ID>会为你随机生成。在本教程中,使用绑定(binding)名称
USERS_NOTIFICATION_CONFIG。npx wrangler kv namespace create USERS_NOTIFICATION_CONFIG🌀 Creating namespace with title "USERS_NOTIFICATION_CONFIG" ✨ Success! Add the following to your configuration file in your kv_namespaces array: { "kv_namespaces": [ { "binding": "USERS_NOTIFICATION_CONFIG", "id": "<BINDING_ID>" } ] }
-
在 Cloudflare 仪表板中,前往 Workers KV 页面。
Go to Workers KV ↗ -
选择 Create instance(创建实例)。
-
输入命名空间名称。在本教程中,使用
kv_tutorial_namespace。 -
选择 Create(创建)。
你必须创建绑定(binding)以将 Worker 与 KV 命名空间连接。绑定(binding) 允许 Workers 访问 Cloudflare 开发者平台上的资源(如 KV)。
要将 KV 命名空间绑定到 Worker:
-
在 Wrangler 文件中,添加以下内容,使用终端中从步骤 2 生成的值:
{ "kv_namespaces": [ { "binding": "USERS_NOTIFICATION_CONFIG", "id": "<BINDING_ID>" } ] }[[kv_namespaces]] binding = "USERS_NOTIFICATION_CONFIG" id = "<BINDING_ID>"绑定(binding)名称不需要与你创建的命名空间对应。绑定(binding)名称只是引用。具体来说:
- 你为
binding设置的值(字符串)用于在 Worker 中引用此 KV 命名空间。在本教程中,应为USERS_NOTIFICATION_CONFIG。 - 绑定(binding)必须是有效的 JavaScript 变量名 ↗。例如,
binding = "MY_KV"或binding = "routingConfig"都是有效的绑定(binding)名称。 - 绑定(binding)在 Worker 内的
env.<BINDING_NAME>处可用。在本教程中,绑定(binding)在env.USERS_NOTIFICATION_CONFIG处可用。
- 你为
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
选择你在步骤 1 中创建的
kv-tutorialWorker。 -
前往 Bindings(绑定) 选项卡,然后选择 Add binding(添加绑定)。
-
选择 KV namespace(KV 命名空间) > Add binding(添加绑定)。
-
在 Variable name(变量名称) 中命名绑定(binding)(
BINDING_NAME),然后从下拉菜单中选择你在步骤 2 中创建的 KV 命名空间(kv_tutorial_namespace)。 -
选择 Add binding(添加绑定) 以部署绑定(binding)。
你可以通过 Wrangler 或直接从 Workers 应用与 KV 命名空间交互。
使用 Wrangler 向空的 KV 命名空间写入值:
-
在终端中运行
wrangler kv key put子命令,分别输入键和值。<KEY>和<VALUE>是你选择的值。npx wrangler kv key put --binding=<BINDING_NAME> "<KEY>" "<VALUE>"在本教程中,你将向步骤 2 中创建的 KV 命名空间添加键
user_1,值为enabled。npx wrangler kv key put --binding=USERS_NOTIFICATION_CONFIG "user_1" "enabled"Writing the value "enabled" to key "user_1" on namespace <BINDING_ID>.
-
在 Cloudflare 仪表板中,前往 Workers KV 页面。
Go to Workers KV ↗ -
选择你创建的 KV 命名空间(
kv_tutorial_namespace)。 -
前往 KV Pairs(KV 键值对) 选项卡。
-
输入你选择的
<KEY>。 -
输入你选择的
<VALUE>。 -
选择 Add entry(添加条目)。
使用 Wrangler 从 KV 命名空间访问值:
-
在终端中运行
wrangler kv key get子命令,并输入键值:npx wrangler kv key get --binding=<BINDING_NAME> "<KEY>"在本教程中,你将从步骤 2 中创建的 KV 命名空间获取键
user_1的值。npx wrangler kv key get --binding=USERS_NOTIFICATION_CONFIG "user_1" --text与
put命令类似,get命令也可以通过两种方式访问 KV 命名空间——使用--binding或--namespace-id:
请参阅 kv bulk 文档,将包含多个键值对的文件写入给定 KV 命名空间。
你可以直接从仪表板查看键值对。
-
在 Cloudflare 仪表板中,前往 Workers KV 页面。
Go to Workers KV ↗ -
前往你创建的 KV 命名空间(
kv_tutorial_namespace)。 -
前往 KV Pairs(KV 键值对) 选项卡。
-
在 Worker 脚本中,在
Env接口中添加 KV 绑定(binding)。如果你使用 JavaScript 引导项目,则不需要此步骤。interface Env { USERS_NOTIFICATION_CONFIG: KVNamespace; // ... other binding types } -
在
USERS_NOTIFICATION_CONFIG上使用put()方法创建新的键值对。你将向 KV 命名空间添加新键user_2,值为disabled。let value = await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); -
使用 KV
get()方法获取存储在 KV 命名空间中的数据。你将从 KV 命名空间获取键user_2的值。let value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
你的 Worker 代码应如下所示:
export default {
async fetch(request, env, ctx) {
try {
await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
if (value === null) {
return new Response("Value not found", { status: 404 });
}
return new Response(value);
} catch (err) {
console.error(`KV returned error:`, err);
const errorMessage =
err instanceof Error
? err.message
: "An unknown error occurred when accessing KV storage";
return new Response(errorMessage, {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
},
};export interface Env {
USERS_NOTIFICATION_CONFIG: KVNamespace;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
try {
await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2");
if (value === null) {
return new Response("Value not found", { status: 404 });
}
return new Response(value);
} catch (err) {
console.error(`KV returned error:`, err);
const errorMessage =
err instanceof Error
? err.message
: "An unknown error occurred when accessing KV storage";
return new Response(errorMessage, {
status: 500,
headers: { "Content-Type": "text/plain" },
});
}
},
} satisfies ExportedHandler<Env>;上述代码:
- 使用 KV 的
put()方法向 KV 命名空间写入键。 - 使用 KV 的
get()方法读取同一键。 - 检查键是否为 null,如果是则返回
404响应。 - 如果键不为 null,则返回键的值。
- 使用 JavaScript 的
try...catch↗ 异常处理捕获潜在错误。从任何服务(如 Workers KV 或使用fetch()的外部 API)写入或读取时,你应预期显式处理异常。
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
前往你创建的
kv-tutorialWorker。 -
选择 Edit Code(编辑代码)。
-
清除
workers.js文件的内容,然后粘贴以下代码。export default { async fetch(request, env, ctx) { try { await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2"); if (value === null) { return new Response("Value not found", { status: 404 }); } return new Response(value); } catch (err) { console.error(`KV returned error:`, err); const errorMessage = err instanceof Error ? err.message : "An unknown error occurred when accessing KV storage"; return new Response(errorMessage, { status: 500, headers: { "Content-Type": "text/plain" }, }); } }, };export interface Env { USERS_NOTIFICATION_CONFIG: KVNamespace; } export default { async fetch(request, env, ctx): Promise<Response> { try { await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled"); const value = await env.USERS_NOTIFICATION_CONFIG.get("user_2"); if (value === null) { return new Response("Value not found", { status: 404 }); } return new Response(value); } catch (err) { console.error(`KV returned error:`, err); const errorMessage = err instanceof Error ? err.message : "An unknown error occurred when accessing KV storage"; return new Response(errorMessage, { status: 500, headers: { "Content-Type": "text/plain" }, }); } }, } satisfies ExportedHandler<Env>;上述代码:
- 使用 KV 的
put()方法向BINDING_NAME写入键。 - 使用 KV 的
get()方法读取同一键,如果键为 null(或键未设置或不存在)则返回错误。 - 使用 JavaScript 的
try...catch↗ 异常处理捕获潜在错误。从任何服务(如 Workers KV 或使用fetch()的外部 API)写入或读取时,你应预期显式处理异常。
浏览器应简单地返回与你在
get()方法中指定的KEY对应的VALUE。 - 使用 KV 的
-
选择 Deploy(部署) 旁边的下拉箭头并选择 Save(保存)。
将 Worker 部署到 Cloudflare 全球网络。
-
运行以下命令将 KV 部署到 Cloudflare 全球网络:
npm run deploy -
访问新创建的 Workers KV 应用的 URL。
例如,如果你的新 Worker URL 是
kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev,访问https://kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev/会向 Worker 发送请求,该请求写入(并读取)Workers KV。
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
选择你的
kv-tutorialWorker。 -
选择 Deployments(部署)。
-
从 Version History(版本历史) 表中选择 Deploy version(部署版本)。
-
从 Deploy version(部署版本) 页面选择 Deploy(部署)。
这会将 Worker 代码的最新版本部署到生产环境。
完成本教程后,你已:
- 创建了 KV 命名空间
- 创建了从该命名空间读写数据的 Worker
- 在全球部署了项目。
如果你有任何功能请求或发现任何错误,请加入 Cloudflare Developers Discord 社区 ↗ 直接与 Cloudflare 团队分享反馈。