实现思路:秒杀活动的痛点一般是要在高并发的环境下保持高性能,同时也要防止库存超买超卖的情况,而数据库很难保证在高并发环境下的稳定性,所以考虑使用一些高性能组件来实现Redis和Rabbitmq
基本业务功能大家可以参考mall系统的设计,同时结合京东的秒杀设计需求来实现,mall链接地址:营销模块数据库表解析(一) | mall学习教程
需求与实现:
1.商品信息查询:
商品信息查询这块有两个入口,一个是秒杀专场单品查看,一个是检索普通信息商品的时候也要检索出来秒杀商品信息
(1) 秒杀商品一般都是比较优惠的,需要承受高并发,所以我们需要进行缓存预热,在创建秒杀活动的时候就要把相应的商品信息加到redis里面
(2)普通商品信息检索,这里分为两种做法,第一种秒杀商品不参与普通商品信息检索,当然因为咱们是参考京东所以就不考虑了,第二种是能检索出来,并参与正常下单,这里的并发不高还是按照普通商品信息检索基于ES来做就好
2.商品下单:
商品下单流程,里卖弄有个核心的操作就是库存扣减,为了避免出现超买超卖现象,可以利用redis的单线程机制,利用Lua脚本,先去查验库存是否充足,如果充足进行扣减,失败的话当然订单也失败了,库存扣减成功后,进入到下单过程,避免和数据库操作,这里使用rabbitmq的削峰填谷,把订单发送到消息队列里面,在进行落库