我面试被问到的时候有点懵,因为之前的业务都没有涉及到这个,我回答的是加锁,后面我看过其他人的回答后,总结了几种方法
1.数据库乐观锁
加一个字段版本号
扣库存的时候判断一下版本号
2.把库存字段改为unsigned
这样可以保证库存不为负数,如果并发情况下被扣为负数的时候会报错,这个时候try catch然后返回库存不足就可以了
3.用redis的List数据类型
把所有秒杀请求插入到redis的队列了,当库存达到阈值后停止插入,然后消费redis里的数据
我面试被问到的时候有点懵,因为之前的业务都没有涉及到这个,我回答的是加锁,后面我看过其他人的回答后,总结了几种方法
1.数据库乐观锁
加一个字段版本号
扣库存的时候判断一下版本号
2.把库存字段改为unsigned
这样可以保证库存不为负数,如果并发情况下被扣为负数的时候会报错,这个时候try catch然后返回库存不足就可以了
3.用redis的List数据类型
把所有秒杀请求插入到redis的队列了,当库存达到阈值后停止插入,然后消费redis里的数据