NEXT.JS 11 · IDEMPOTENCY & CONCURRENCY

重复请求与并发写入实验台

先把同一个业务意图投递多次,再让两个编辑器拿着同一版数据同时保存。观察客户端体验措施、数据库裁决和并发控制分别能守住什么。

pending / disabled减少同一界面的误触
幂等 key标识哪一次业务意图
唯一约束裁决并发请求的赢家
同一事务让任务与回执一起提交
01

重复投递回执台

切换投递来源和防护方式,查看服务器实际收到多少请求、写了几条任务、保存了什么回执。

UNIQUE(scope, key)
网络到达0
任务写入0
回执数量0
回放命中0
冲突 / 拒绝0

请求信封与服务器答复

  1. 等待投递选择场景后运行key=K-42

mutation_receipt 回执簿

唯一作用域指纹状态response
尚无回执

业务任务表

  • 尚无任务写入
数据库裁决日志
  1. [待机] 尚未模拟任何请求。
等待重复投递

禁用按钮只能覆盖本页的连续点击;刷新、代理重试、队列和其他标签页仍能到达服务器。

02

并发编辑对撞台

A 与 B 都基于 version 7 编辑不同字段。先复现旧快照覆盖新值,再选择条件更新或事务锁。

prevent lost update
并发策略

编辑器 A · 改标题

读取 version 7
旧标题
整理上线清单
旧优先级

准备修改:标题 → 整理发布检查表

编辑器 B · 改优先级

读取 version 7
旧标题
整理上线清单
旧优先级

准备修改:优先级 →

数据库最终文档

version 7
标题
整理上线清单
优先级
写入次数
0
冲突

实际执行时间线

  1. 0

    两个编辑器都持有 version 7 的旧快照。

关键数据库条件

UPDATE task
SET title = ?, priority = ?
WHERE id = 'task-1';
等待两个旧快照相撞

没有版本条件时,后写入的完整旧快照会悄悄覆盖先提交的字段。

挑战 01 · 客户端 pending

加载题目中…

选择一个答案后,这里会解释系统边界。