我入库了一只笔,数量为30只,员工1和员工2在同时选择了这条入库信息准备进行出库,然后员工1进行出库操作,这条入库信息的数量就变为了0,然后笔的库存-30,之后因为员工2已经在页面上选好了这条信息,所以她可以继续进行出库,这条入库信息数量变为-30,笔的库存又被减了30,有什么方法可以解决这种问题吗?我想到使用乐观锁解决,但是不行,因为不在同一线程中version改了也没用,第二次出库获取的是修改后的version,所以第二次出库还是正确的
乐观锁,可以解决这个问题,不在一个线程,不在一个服务器都可以
可以在update之前做个查询,符合数量就更改,不符合就返回
你说的这种version也能解决大部分问题,每次改库存的时候至少得前置判断库存够不够,修改时where条件得加上 version=version
出库接口,你拿到数据首先得判断数量够不够出库,然后再进行出库或者错误提醒。这个没有什么优雅不优雅的,就是需要这么写啊。
但是高并发也会出现问题,两个线程同时取数,同时走判断逻辑,同时出库。
需要用到同步锁或者分布式锁。
加入分布式锁