Cloudflare D1、KV、R2 存储产品基础使用与收费额度
wxk1991 Lv5

Cloudflare D1、KV、R2 存储产品基础使用与收费额度

Cloudflare 的存储产品不能混着用。D1、KV、R2 看起来都能“存东西”,但适合的场景完全不同。

D1 是 SQL 数据库,KV 是键值存储,R2 是对象存储。选错产品,后面会很别扭。

说明:本文额度按 2026-06-07 官方文档整理,后续可能变化。


一、怎么选择

需要 SQL 查询、表结构、筛选、排序、分页,用 D1。

需要按 key 快速读取配置、缓存、开关,用 KV。

需要存图片、视频、压缩包、附件、备份,用 R2。

简单判断:

1
2
3
用户表、订单表、评论表 -> D1
站点配置、缓存结果、feature flag -> KV
图片、文件、上传内容 -> R2

二、D1 基础使用

创建数据库:

1
wrangler d1 create my-db

创建表:

1
2
3
4
5
create table posts (
id integer primary key autoincrement,
title text not null,
created_at text not null
);

执行迁移:

1
2
wrangler d1 migrations create my-db init
wrangler d1 migrations apply my-db

Worker 里查询:

1
2
3
4
5
const rows = await env.DB
.prepare("select id, title from posts order by id desc limit 10")
.all();

return Response.json(rows.results);

D1 适合轻量关系型数据,但不要把它当成无限扩展的传统大型数据库。


三、D1 免费额度与收费

Free 计划常见额度:

  • 每天 5,000,000 行读取
  • 每天 100,000 行写入
  • 5 GB 存储

付费计量通常关注:

  • 每月包含前 25,000,000,000 行读取,超出后 $0.001/百万行
  • 每月包含前 50,000,000 行写入,超出后 $1.00/百万行
  • 存储前 5 GB 包含,超出后 $0.75/GB-month

如果你的服务是后台管理、博客评论、小型 API,D1 的免费额度通常能撑很久。如果是高频写入和复杂查询,就要提前估算行读写量。


四、KV 基础使用

创建命名空间:

1
wrangler kv namespace create CONFIG

配置 binding:

1
2
3
[[kv_namespaces]]
binding = "CONFIG"
id = "xxxx"

Worker 里读取:

1
2
const value = await env.CONFIG.get("site:title");
return new Response(value ?? "not found");

写入:

1
await env.CONFIG.put("site:title", "My Blog");

KV 是最终一致性存储,适合读多写少,不适合强一致计数器。


五、KV 免费额度与收费

Free 计划常见额度:

  • 每天 100,000 次读取
  • 每天 1,000 次写入
  • 每天 1,000 次删除
  • 每天 1,000 次列表操作
  • 1 GB 存储

付费计量通常关注:

  • 读取每月包含 10,000,000 次,超出后 $0.50/百万次
  • 写入每月包含 1,000,000 次,超出后 $5.00/百万次
  • 删除每月包含 1,000,000 次,超出后 $5.00/百万次
  • 列表每月包含 1,000,000 次,超出后 $5.00/百万次
  • 存储包含 1 GB,超出后 $0.50/GB-month

KV 的关键是控制写入频率。如果数据经常变化,D1 或 Durable Objects 可能更合适。


六、R2 基础使用

创建 bucket:

1
wrangler r2 bucket create my-bucket

配置 binding:

1
2
3
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "my-bucket"

上传对象:

1
await env.BUCKET.put("hello.txt", "hello r2");

读取对象:

1
2
3
4
5
6
const object = await env.BUCKET.get("hello.txt");
if (!object) {
return new Response("not found", { status: 404 });
}

return new Response(object.body);

R2 也兼容 S3 API,适合从原有 S3 工具迁移。


七、R2 免费额度与收费

R2 免费额度常见包括:

  • 10 GB/月存储
  • 每月 1,000,000 次 Class A 操作
  • 每月 10,000,000 次 Class B 操作

收费主要看:

  • Standard storage:$0.015/GB-month
  • Class A 操作:$4.50/百万次
  • Class B 操作:$0.36/百万次

R2 的一个重要特点是 Cloudflare 不收 R2 出口流量费。对图片、附件、下载类业务,这是很有吸引力的点。


八、实践建议

不要纠结哪个产品“最好”,先看数据形态。

需要表和查询,用 D1。需要按 key 读配置和缓存,用 KV。需要文件和对象,用 R2。

如果一个项目要做完整小型后端,常见组合是:Workers 提供 API,D1 存业务数据,KV 存缓存和配置,R2 存文件。


参考资料