秒杀场景的处理方案:
第一种方案:
1、Redis的decr进行原子减操作,将库存减去1
2、生成唯一订单号,将用户、商品、唯一订单号等信息,放入到异步队列中,
3、消耗异步队列,进行数据库层面的库存减1,生成订单信息
4、队列的话用的是Redis实现的list实现的队列,因为Redis已经搭建过了,有这个特性,直接用就好。用其他队列实现方式的话需要重新搭建。比如用mq
5、刚开始用的是Blockingqueue,这个阻塞队列是jdk的,用的是应用服务器的内存,并发高的时候,可能会内存溢出。抛弃此方案
6、最终决定用Redis的list是双向链表结构实现队列
第二种方案:
利用分布式锁,加锁后串行执行,这样保证了库存不会超卖,但是效率不高,因为加锁时有商品信息,该商品信息某一时刻只能一个人进行下单,没有第一种方案效率高。