业务场景:
用户用不同浏览器打开了同一个订单,后一次修改覆盖了前一次修改的内容,导致下单错误。
拓展场景:改变订单信息的任务被创建且未写入前,其他用户修改了订单信息,该任务完成后覆盖了这次修改的内容。
已知实现方案和优劣:
1.(暂定)编辑锁
- 锁查询接口,前端传入业务 code 和当前业务唯一 id 来创建和查询锁
- 业务 code 由后端订,保证跨服务唯一性
- 当有锁存在时返回正在编辑的用户信息
- 有返回的话,在进入页面和保存页面时出现提示,但非强制拦截(解锁接口可能未成功发起)
- 进入页面时提示是为了避免用户录入大量信息后无法保存
- 保存时提示是为了避免用户在页面长期停留后遗忘了进入时提示
- 在页面组件销毁、浏览器或标签关闭时调用解锁接口
2.数据版本号
- 缺点:
- 不能拦截同一时间发起的数据修改
文章讨论了在用户同时使用不同浏览器修改同一订单时产生的问题,提出了两种解决方案:一是利用编辑锁进行并发控制,二是使用数据版本号记录修改历史。编辑锁存在限制,而数据版本号无法拦截同一时间的修改。

被折叠的 条评论
为什么被折叠?



