跳转到内容
搜索文档

快速入门

创建一个基本的键值存储,存储应用中所有用户的通知配置,每个用户可能有 enabled 或 disabled 通知。

最后更新 查看 MarkdownAgent 设置

Workers KV 为你的 Cloudflare Workers 应用提供低延迟、高吞吐量的全球存储。Workers KV 非常适合存储用户配置数据、路由数据、A/B 测试配置和身份验证令牌,且适合读取密集型工作负载。

本指南将指导你完成:

  • 创建 KV 命名空间。
  • 从 Cloudflare Worker 向 KV 命名空间写入键值对。
  • 从 KV 命名空间读取键值对。

你可以通过 Wrangler CLI 或 Cloudflare 仪表板执行这些任务。

快速开始

如果你想跳过设置步骤并快速开始,请点击下面的按钮。

Deploy to Cloudflare

这会在你的 GitHub 账户中创建仓库并将应用部署到 Cloudflare Workers。如果你熟悉 Cloudflare Workers 并希望跳过逐步指导,请使用此选项。

如果你是 Cloudflare Workers 新手,你可能希望手动按照步骤操作。

先决条件

  1. 注册 Cloudflare 账户 ↗。
  2. 安装 Node.js ↗。

Node.js 版本管理器

使用 Volta ↗ 或 nvm ↗ 等 Node 版本管理器,以避免权限问题并切换 Node.js 版本。本指南后续将介绍的 Wrangler 需要 Node 版本 16.17.0 或更高。

1. 创建 Worker 项目

创建新的 Worker 以读写 KV 命名空间。

  1. 运行以下命令创建名为 kv-tutorial 的新项目:

    npm 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-tutorial Worker 访问 kv 数据库的方式。
  2. 进入你刚为 Worker 项目创建的目录:

    cd kv-tutorial
  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 选择 Create application(创建应用程序)。

  3. 选择 Start with Hello World!(从 Hello World 开始!) > Get started(开始使用)。

  4. 命名 Worker。在本教程中,将 Worker 命名为 kv-tutorial。

  5. 选择 Deploy(部署)。

2. 创建 KV 命名空间

KV 命名空间 是复制到 Cloudflare 全球网络的键值数据库。

你可以使用 Wrangler 创建新的 KV 命名空间。你也可以使用它在 KV 命名空间内执行 put、list、get 和 delete 等操作。

通过 Wrangler 创建 KV 命名空间:

  1. 打开终端并运行以下命令:

    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>"
    		}
    	]
    }
  1. 在 Cloudflare 仪表板中,前往 Workers KV 页面。

    Go to Workers KV ↗
  2. 选择 Create instance(创建实例)。

  3. 输入命名空间名称。在本教程中,使用 kv_tutorial_namespace。

  4. 选择 Create(创建)。

3. 将 Worker 绑定到 KV 命名空间

你必须创建绑定(binding)以将 Worker 与 KV 命名空间连接。绑定(binding) 允许 Workers 访问 Cloudflare 开发者平台上的资源(如 KV)。

要将 KV 命名空间绑定到 Worker:

  1. 在 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 处可用。
  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 选择你在步骤 1 中创建的 kv-tutorial Worker。

  3. 前往 Bindings(绑定) 选项卡,然后选择 Add binding(添加绑定)。

  4. 选择 KV namespace(KV 命名空间) > Add binding(添加绑定)。

  5. 在 Variable name(变量名称) 中命名绑定(binding)(BINDING_NAME),然后从下拉菜单中选择你在步骤 2 中创建的 KV 命名空间(kv_tutorial_namespace)。

  6. 选择 Add binding(添加绑定) 以部署绑定(binding)。

4. 与 KV 命名空间交互

你可以通过 Wrangler 或直接从 Workers 应用与 KV 命名空间交互。

4.1. 写入值

使用 Wrangler 向空的 KV 命名空间写入值:

  1. 在终端中运行 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>.
  1. 在 Cloudflare 仪表板中,前往 Workers KV 页面。

    Go to Workers KV ↗
  2. 选择你创建的 KV 命名空间(kv_tutorial_namespace)。

  3. 前往 KV Pairs(KV 键值对) 选项卡。

  4. 输入你选择的 <KEY>。

  5. 输入你选择的 <VALUE>。

  6. 选择 Add entry(添加条目)。

4.2. 获取值

使用 Wrangler 从 KV 命名空间访问值:

  1. 在终端中运行 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 命名空间。

你可以直接从仪表板查看键值对。

  1. 在 Cloudflare 仪表板中,前往 Workers KV 页面。

    Go to Workers KV ↗
  2. 前往你创建的 KV 命名空间(kv_tutorial_namespace)。

  3. 前往 KV Pairs(KV 键值对) 选项卡。

5. 从 Worker 访问 KV 命名空间

  1. 在 Worker 脚本中,在 Env 接口中添加 KV 绑定(binding)。如果你使用 JavaScript 引导项目,则不需要此步骤。

    interface Env {
    	USERS_NOTIFICATION_CONFIG: KVNamespace;
    	// ... other binding types
    }
  2. 在 USERS_NOTIFICATION_CONFIG 上使用 put() 方法创建新的键值对。你将向 KV 命名空间添加新键 user_2,值为 disabled。

    let value = await env.USERS_NOTIFICATION_CONFIG.put("user_2", "disabled");
  3. 使用 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>;

上述代码:

  1. 使用 KV 的 put() 方法向 KV 命名空间写入键。
  2. 使用 KV 的 get() 方法读取同一键。
  3. 检查键是否为 null,如果是则返回 404 响应。
  4. 如果键不为 null,则返回键的值。
  5. 使用 JavaScript 的 try...catch ↗ 异常处理捕获潜在错误。从任何服务(如 Workers KV 或使用 fetch() 的外部 API)写入或读取时,你应预期显式处理异常。
  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 前往你创建的 kv-tutorial Worker。

  3. 选择 Edit Code(编辑代码)。

  4. 清除 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>;

    上述代码:

    1. 使用 KV 的 put() 方法向 BINDING_NAME 写入键。
    2. 使用 KV 的 get() 方法读取同一键,如果键为 null(或键未设置或不存在)则返回错误。
    3. 使用 JavaScript 的 try...catch ↗ 异常处理捕获潜在错误。从任何服务(如 Workers KV 或使用 fetch() 的外部 API)写入或读取时,你应预期显式处理异常。

    浏览器应简单地返回与你在 get() 方法中指定的 KEY 对应的 VALUE。

  5. 选择 Deploy(部署) 旁边的下拉箭头并选择 Save(保存)。

6. 部署 Worker

将 Worker 部署到 Cloudflare 全球网络。

  1. 运行以下命令将 KV 部署到 Cloudflare 全球网络:

    npm run deploy
  2. 访问新创建的 Workers KV 应用的 URL。

    例如,如果你的新 Worker URL 是 kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev,访问 https://kv-tutorial.<YOUR_SUBDOMAIN>.workers.dev/ 会向 Worker 发送请求,该请求写入(并读取)Workers KV。

  1. 在 Cloudflare 仪表板中,前往 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 选择你的 kv-tutorial Worker。

  3. 选择 Deployments(部署)。

  4. 从 Version History(版本历史) 表中选择 Deploy version(部署版本)。

  5. 从 Deploy version(部署版本) 页面选择 Deploy(部署)。

    这会将 Worker 代码的最新版本部署到生产环境。

摘要

完成本教程后,你已:

  1. 创建了 KV 命名空间
  2. 创建了从该命名空间读写数据的 Worker
  3. 在全球部署了项目。

下一步

如果你有任何功能请求或发现任何错误,请加入 Cloudflare Developers Discord 社区 ↗ 直接与 Cloudflare 团队分享反馈。

这篇文档对您有帮助吗?