更新丢失问题(竞态条件)

2021-09-06  本文已影响0人  菜鸡前端

更新丢失问题在高并发时特别容易出现,不知道你的项目中有没有考虑这个问题,这个问题一旦出现,会造成比较严重的BUG,不容易调试,只能一步一步看日志。下面的场景就会出现更新丢失问题:

更新丢失问题.png

上面的情况是客户端的提交具有明显的时间差异,如果提交的时间间隔很短,那么谁的更新是有效的就取决于谁的网络慢了,因为前面的修改会被后者覆盖掉,那么如何解决这个问题呢?目前我想到以下几种方案。

1. 基于“修改时间”的校验

客户端每次获取资源时,服务端返回资源+getTime。客户端提交时带上getTime,服务端先校验当前记录的 updateTime 和 getTime,如果 updateTime 大于 getTime,说明中间有修改,需要重新获取。

2. 基于“ETAG”的校验

客户端每次获取资源时,服务端返回资源+ETAG(资源的散例值),客户端提交时带上ETAG,服务端从当前记录中查询数据,并计算新的ETAG,如果不一致,则中途有更新,客户端需要重新获取。这个方案类似 HTTP 协议中的 ETAG。

3. 方案比较

4. 参考文档

1、使用乐观锁避免更新丢失问题

上一篇下一篇

猜你喜欢

热点阅读