ef框架下 怎么处理高并发的库存数量

某一商品库存数为100  两个人同时读取到了数量 A添加10 为110 B减20 应为90

数据上下文中A的Quantity+=10(110); B的Quantity-=20(80)

在ef框架下  提交的后台的sql语句 update quantity=A的Quantity(110)  

update Quantity=B的Quantity(80)  导致库存不准确 

如果在读取商品库存数时加锁 A读取完后并没有提交操作(或者提交后延迟很大) 其他用户读取这个商品或者操作其他数据时 会等待时间较长 有可能出现超时

查了许多资料 乐观锁 悲观锁 满足不了要求  有没有大神 给解答下 给个其他的思路


梦里花落0921
浏览 1253回答 1
1回答

摇曳的蔷薇

乐观锁 可以解决这种问题  ,B提交时会抛出错误,catch 住 重试,但是在高并发下并不是好的解决方案。在高并发下一种是直接用sql 语句 去 update ,这样就不存在 使用 ef 更新实体(分为两步,先获取,在修改)这种情况了,在更高的并发下可以考虑缓存库存数据,并保证更新操作的顺序是对的就可以了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL