提供案例
billflare.

OpenNext + Workers KV 跑 Next.js ISR:缓存为什么永不过期,以及怎样给它封顶

Meathill 把自己站点的 KV 存储超额追到 OpenNext 的 KV 增量缓存:写入不带 TTL,且每次部署按 Build ID 前缀留下一整份快照;文章给出他重建缓存生命周期的做法。

适用产品
WorkersKV
来源
作者经验Meathill 的博客
作者
Meathill(@meathill1)

要点

  • 作者发现 OpenNext 的 KV 增量缓存调用 kv.put() 时没有传 expirationTtl(源码里仍留着关于 KV TTL 的 TODO),页面的 revalidate 并不会让 KV 条目过期。
  • 每次 opennextjs-cloudflare deploy 都会执行 populateCache,把所有预渲染页面的 HTML 与 RSC Payload 以新的 Build ID 为前缀批量写入;旧前缀不再被读取却一直留存。数十次发布后他的命名空间涨到 24 GB,计费周期显示存储 3.59 GB-month。
  • 他的处理:换用新命名空间并删除旧命名空间;包装缓存,让每次写入都带 expirationTtl = min(7 天, max(60 秒, 2 × revalidate));并给批量写入步骤补上 expiration_ttl 604800。
  • 官方 KV 文档(2026-10-14 复核):Workers Paid 含 1 GB 存储,超出后每 GB-month 0.50 美元;REST 批量写入里每个键各算一次写入;expirationTtl 最小 60 秒,过期删除的键不再计入存储。

原始来源

  1. 发布

    OpenNext + Workers KV 跑 Next.js ISR:缓存为什么永不过期,以及怎样给它封顶

    打开原始来源

    Meathill 把自己站点的 KV 存储超额追到 OpenNext 的 KV 增量缓存:写入不带 TTL,且每次部署按 Build ID 前缀留下一整份快照;文章给出他重建缓存生命周期的做法。

  2. 作者在 𝕏 分享本文,并按月列出 2026 年被账单“背刺”的经历:七月图片转换、八月容器、九月 prefetch 自我 DDoS、十月 KV 缓存。

    到 𝕏 阅读

    Meathill

    @meathill1 · 𝕏 原帖

    作为Cloudflare资深用户,我的独立开发生涯不断被账单背刺: - 七月:图片转换被坑 - 八月:容器使用被坑 - 九月:prefetch DDOS 自己 - 十月:KV 缓存爆炸 这次分享的,就是我本以为开源框架应该已经做好了,但实际上 // TODO 多年的一个缓存陷阱: https://t.co/NjRzSo510W
作者经验Workers +4

Cloudflare 每月 5 美元,账单却没有跟着封顶

不追高(@Ariella1213)在 X 长文中说明 Workers Paid 的 5 美元是每月最低收费,各产品限制和预算告警都不封顶账户账单,并讨论 denial-of-wallet、写入放大、延迟停机与后台重试如何增加费用。

Durable Objects

Jiuhong:vibe coding 引入 Durable Objects 缺陷,一夜 600 多刀,作者称退回 80% 至账户抵扣。

Jiuhong(@indiehacker9527)在 X 上 shmily7 的帖下回复称,几个月前在 Durable Objects 中 vibe coding 出的缺陷一夜产生 600 多刀账单。经多轮交涉(强调系统缺陷)后,他称退了 80%,但不是退回银行卡,而是退到账户用于后续抵扣;Cloudflare 承诺改进产品,并另送了 startup 礼包。

作者经验Workers +4

Cloudflare 计费避坑指南串文

作者按产品整理 Cloudflare 计费风险,并补充预算预警的使用经验。