某一商品库存数为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读取完后并没有提交操作(或者提交后延迟很大) 其他用户读取这个商品或者操作其他数据时 会等待时间较长 有可能出现超时查了许多资料 乐观锁 悲观锁 满足不了要求 有没有大神 给解答下 给个其他的思路
1 回答

摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
乐观锁 可以解决这种问题 ,B提交时会抛出错误,catch 住 重试,但是在高并发下并不是好的解决方案。在高并发下一种是直接用sql 语句 去 update ,这样就不存在 使用 ef 更新实体(分为两步,先获取,在修改)这种情况了,在更高的并发下可以考虑缓存库存数据,并保证更新操作的顺序是对的就可以了
添加回答
举报
0/150
提交
取消