为了账号安全,请及时绑定邮箱和手机立即绑定

多层架构中并发控制

多层架构中并发控制

慕工程0101907 2018-11-08 06:10:09
现有系统是简单三层,以商品购买为例。逻辑层判断件数是否大于0.但是仍然出现两个客户同时购买一个件数为1的商品。怎么杜绝这种事情发生?
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

1、将此购买逻辑通过存储过程完成,因为 DB 是唯一的,所以可以做到逻辑正确性;

2、可用 Count 字段(通常会使用额外的RowVersion 字段,timestamp 类型来做并发更新)来控制更新语句,通过检查更新是否成功来判断是否购买成功,类似如下代码:

var version= shop.RowVersion;

shop.count--;

update t set Count = shop.count from t where RowVersion = version;

3,将订单处理逻辑部署为单独的服务,此服务串行读取订单并处理


查看完整回答
反对 回复 2018-11-11
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

如果这逻辑是靠数据库处理的话,可以使用事务。如果在程序里处理的话,保证所有请求的调用对象是同一个实例就行了。

查看完整回答
反对 回复 2018-11-11
  • 2 回答
  • 0 关注
  • 372 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信