Cloudflare D1 怎么做事务?
D1 里写 BEGIN 会直接报错,事务的单位是 batch()。这篇讲清 batch 怎么保证一起成功或一起回滚,以及“读-判断-写”该怎么改写。
哈喽,我是颜sir,询盘自由网背后的人。做网络营销快6年,运气不错,实现了财务自由,目前全职在家钻研更多赚钱方法。在钻研过程中,我发现网上几乎找不到优质的中文资源。我深知新手入门需经历痛苦挣扎,所以创建了询盘自由网,把我知道的分享给你。
D1 里写 BEGIN 会直接报错,事务的单位是 batch()。这篇讲清 batch 怎么保证一起成功或一起回滚,以及“读-判断-写”该怎么改写。
D1 用版本化的 SQL 文件管理 schema。这篇讲迁移的三条命令、绑定名和数据库名的区别,以及本地与线上的差异。
开了读副本之后,用户可能读不到自己刚写的数据。这篇讲 withSession、bookmark 的用法,以及哪些结论只能引官方、本地看不到。
D1 的边界很明确:单库大小上限、每库单线程、没有交互式事务。这篇讲这些限制各自意味着什么,以及哪些场景 D1 依然合适。
wrangler rollback 能把代码退回旧版本,但退不回 KV、D1 里已经改过的数据。这篇讲清版本与部署的区别、渐进发布怎么做,以及回滚能回什么、不能回什么。
Workers 可以直接托管静态文件,不写 Worker 代码也行。这篇讲 assets 配置怎么写、纯静态与静态加动态两种形态,以及计费、限额和回滚上的要点。
多环境忘了 --env、绑定没重新声明、dashboard 的改动被覆盖、Cron 注释掉没关闭,这四个部署问题是最常见的原因。
Worker 部署后需要一个入口:workers.dev、Custom Domain 还是 Route。这篇讲清三者各自适合什么场景,以及配置和 DNS 上的差别。
单线程只保证同步代码不被打断,一遇到 await 就可能被别的请求插进来。这篇讲输入闸门、输出闸门,以及怎么写读改写才不丢更新。
DO 实例的内存随时可能消失,休眠、被移出内存、部署和迁移都会让构造函数重新执行。这篇讲这些时间点,以及该把什么写进存储。
DO 每个对象有一份私有存储,SQLite 后端是新对象的推荐选择。这篇讲两套 API、官方列出的限额、Free 账户上限的矛盾,以及本地模拟和线上的差别。
alarm 是每个 Durable Object 一个的、可持久的定时器。这篇讲 setAlarm 的写法、失败后怎么重试、必须幂等的原因,以及它和 Cron Triggers 的分工。
朴素的 server.accept() 会让 Durable Object 一直驻留内存并持续计费。这篇讲 Hibernation API 的写法、休眠后哪些状态会丢,以及什么会阻止休眠。
按用户、IP 或 token 限流时,每个 key 一个 Durable Object,计数在对象内串行。这篇给出滑动窗口的写法,以及它在延迟、计费和热点上的代价。
Workers 天生无状态,请求之间没法对同一件东西排队。这篇讲 Durable Objects 的核心模型,一个 ID、一个实例、一个线程,以及它什么时候不该用。
判断一个需求该不该用 Durable Objects,关键看有没有自然的分片键。这篇用协调器和聊天房间两个例子,讲清适用形状、必须守的纪律和边界。
Workers KV 读得很快,很多人顺手就把它当数据库用,结果上线后读到旧值、计数器丢更新。这篇讲清 KV 为什么不能当数据库,以及它真正适合放什么。
一次读多个 key 最多 100 个,批量写入要走 Wrangler 或 REST,list 要靠 list_complete 判断结束并重复传 prefix。
key、value、metadata 的大小上限,每次调用最多多少次 KV 操作,免费和付费计划怎么计费,哪些限制本地能碰到、哪些碰不到。
Worker 先读 KV,没有再回源并写回。热点 key 过期、空结果缓存、大值读取这三个坑怎么处理。