对象存储基础与 Bucket 管理
图片、视频、文档这类二进制大文件,用普通数据库或键值存储都不合适,体积大、访问模式又是整文件读取。Cloudflare R2 是专门的对象存储服务,用来存放这类非结构化数据,而且出口流量零费用,是它最大的卖点。
R2 是什么
R2 是 Cloudflare 自研的对象存储服务,名字来源于 Content Addressable Storage 的”R2”层级概念。它允许你把任意类型的文件,图片、视频、备份包、日志文件,统一以”对象”的形式存放在叫做 Bucket 的容器里。
每个对象由三部分组成
| 组成部分 | 说明 |
|---|---|
| Key | 对象名称,类似文件路径,例如 images/1.png |
| Data | 对象内容,二进制流 |
| Metadata | 自定义元数据,键值对形式 |
对象存储不关心内容是什么,只负责按 Key 存取,这种简单模型让它能横向扩展到几乎无限的容量。
与 AWS S3 的关系
R2 完全兼容 S3 协议。也就是说,任何用 AWS SDK 写的、用 S3 命令行操作的、对接 S3 的第三方工具,改个端点地址和密钥就能直接用在 R2 上。
| 兼容项 | 说明 |
|---|---|
| API 协议 | 兼容 S3 REST API,包括签名版本 4 |
| SDK | AWS SDK 全家桶、MinIO SDK、boto3 都能用 |
| 工具 | s3cmd、rclone、Cyberduck 等图形工具直接连 |
| 数据格式 | 对象组织方式、元数据格式与 S3 一致 |
最大的差别在费用。S3 在数据被读取或外传时按流量计费,R2 不收出口费用,这对图片站、视频站、CDN 回源场景是数量级的成本节省。
与 KV D1 的定位区别
Cloudflare 平台上还有 KV 键值存储和 D1 关系型数据库,三者各自定位不同,放在一张表里对比就清晰了
| 对比项 | R2 对象存储 | KV 键值存储 | D1 关系型数据库 |
|---|---|---|---|
| 数据形态 | 二进制文件、大对象 | 字符串值 | 表行数据 |
| 单条上限 | 单对象最大 5TB | 单值 25MB | 行数据视表结构 |
| 查询方式 | 按 Key 精确存取 | 按 Key 精确存取 | SQL,支持条件聚合 |
| 是否可公开 | 可直接对外提供下载 | 私有,需 Worker 代理 | 私有,需 Worker 代理 |
| 典型场景 | 图片、视频、备份、静态资源 | 配置、缓存、用户资料 | 业务数据、复杂查询 |
简单记,R2 存文件、KV 存配置、D1 存数据。三者经常配合使用,例如 D1 存元数据、R2 存原始文件、KV 加速热点查询。
无出口费用优势
传统对象存储的成本结构里,出口流量费往往是最大头。例如某图片站每月从 S3 输出 10TB 流量,按 0.09 美元每 GB 计算,光出口费就要 900 多美元。
R2 的计费模型只有三项
| 计费项 | 免费额度(每月) | 说明 |
|---|---|---|
| 存储容量 | 10GB | 按实际占用空间计 |
| A 类操作 | 100 万次 | 写入、列表等修改类操作 |
| B 类操作 | 1000 万次 | 读取、头信息等查询类操作 |
| 出口流量 | 无限 | 完全免费 |
这意味着无论用户从 R2 拉取多少次文件、拉取多大体积,都不产生流量费。这对图片站、视频站、文件分发、CDN 回源的场景非常友好。
创建 Bucket
Bucket 是对象的容器,类似一个顶级文件夹。每个 Cloudflare 账户下可以创建多个 Bucket,相互隔离。
在仪表盘里进入 R2 页面,点击 Create Bucket,输入名称即可。Bucket 名称需要全局唯一,只能用小写字母、数字和短横线,长度 3 到 63 字符。
命令行同样可以创建
wrangler r2 bucket create my-assets
执行后输出
Creating bucket my-assets with a default jurisdiction of 'eu'.
Created bucket my-assets.
默认管辖区域会影响数据物理存储位置,对国内业务不敏感的话保持默认即可。
仪表盘上传下载
创建好 Bucket 后就能在仪表盘直接管理文件。进入 Bucket 详情页,点击 Upload 按钮可以选择本地文件上传,或者新建文件夹归类。
下载同样简单,每个对象右侧有下载按钮,也可以批量勾选后下载。这种图形化方式适合手动测试和小批量维护。
对象 Key 支持用斜杠分隔来模拟目录结构,例如 images/2026/avatar.png,仪表盘会按斜杠折叠显示为文件夹。但要注意 R2 本身是扁平结构,斜杠只是 Key 的一部分,没有真正的目录概念。
存储类别
R2 提供两种存储类别,用来在不同访问频率下优化成本
| 存储类别 | 适用场景 | 费用特点 |
|---|---|---|
| Standard | 频繁访问的热数据 | 存储单价高,读取不收额外费 |
| Infrequent Access | 偶尔访问的冷数据 | 存储单价低,每次读取收检索费 |
切换方式有两种。仪表盘里选中对象后点击 Edit metadata,在 Storage class 下拉框里切换。命令行用 wrangler r2 object put 时加 --storage-class 参数
wrangler r2 object put my-assets/archive/2024.zip --file ./2024.zip --storage-class INFREQUENT_ACCESS
冷热分层策略一般这样设计,最近 30 天的图片放 Standard,更早的归档放 Infrequent Access,能省下一半以上的存储费。
小结
R2 把对象存储的门槛降得很低,免费额度足够个人项目跑很久,无出口费更是直接拉低了流量成本。这一篇认识了它的定位和基本操作,下一篇讲怎么用 S3 兼容 API 把它接入到代码里。