跳转到内容
搜索文档

快速入门

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

最后更新 查看 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 版本管理器

使用 Voltanvm 等 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.jsonckv-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 团队分享反馈。

这篇文档对您有帮助吗?