猿问

多层架构中并发控制

现有系统是简单三层,以商品购买为例。逻辑层判断件数是否大于0.但是仍然出现两个客户同时购买一个件数为1的商品。怎么杜绝这种事情发生?

慕工程0101907
浏览 373回答 2
2回答

富国沪深

1、将此购买逻辑通过存储过程完成,因为 DB 是唯一的,所以可以做到逻辑正确性;2、可用 Count 字段(通常会使用额外的RowVersion 字段,timestamp 类型来做并发更新)来控制更新语句,通过检查更新是否成功来判断是否购买成功,类似如下代码:var version= shop.RowVersion;shop.count--;update t set Count = shop.count from t where RowVersion = version;3,将订单处理逻辑部署为单独的服务,此服务串行读取订单并处理

一只萌萌小番薯

如果这逻辑是靠数据库处理的话,可以使用事务。如果在程序里处理的话,保证所有请求的调用对象是同一个实例就行了。
随时随地看视频慕课网APP
我要回答