原因
两个人同时购买同一件商品,会产生超卖问题。
解决
-
表设计
无符号的表设计(unsigned)。在设计表的时候,把字段设置成无符号,即库存小于0的话,就会报错
处理:在进行商品的库存减少的时候,不要先查再更新,直接更新库存。 -
使用锁 耗费资源
1.悲观锁
select * from table_name for update
2.乐观锁
update sku set stock = 1 where id = ? and stock = 1
假设现在库存只有1件了 -
redis队列 使用List类型
举例:iphoneX这件商品有100个库存,把商品的id向redis的list类型中压栈100次(把id存入100次),下单的时候询问时候有库存,判断的方式是是否能POP出数据