秒杀场景通常需要解决两个问题:
1、高并发
2、库存超卖
对于高并发问题,我们可以使用缓存系统来解决,避免直接对数据库进行操作,造成服务器宕机,
可以使用redis,也可以使用消息队列。
(1)使用redis的话,在redis里面对商品库存做一个“伪商品列表”,如有100件商品,那么就在redis里建一个列表,里面插入100个数(可以都是0、1啥的)。然后在redis接收到抢商品的请求时,利用redis列表的pop原子操作,从之前建立的100个伪商品列表里pop出一个元素,如果正常pop,那么抢货成功,将该请求的信息插入到抢货成功列表中,然后告知客户端,抢货成功。
(2)使用消息队列,在抢货时,将请求都发送到消息队列里面,然后使用消费者,将消息队列里面的数据读出来,直到数量达到商品的上限。然后将这些请求成功的消息通知到对应的客户。
(不是特别的实时)
网友评论