订单实现的流程(包含抢购功能)

导读:本篇文章讲解 订单实现的流程(包含抢购功能),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        1、缓存商品信息,第一次访问商品信息的时候,会进入抢购页面,这个时候呢需要去数据库中确定一下有哪些商品会进行抢购,并将要抢购的商品放到缓存中去(redis),这个操作呢是为了第二次高效的访问,当第二次访问的时候先判断一下缓存里面有没有这个数据,如果缓存中有的话,直接从缓存中去取,如果没有的话再从数据库中去拿到这数据。
        2、拿到商品信息,把商品信息从缓存中取出来,这时候点击抢购的时候,请求头信息里面会有一个(token)字符串(这个字符串是用来标识我们是哪个用户),拿到字符串去缓存里面把用户取出来,或者判断一下这个用户有没有抢购过这个商品。这里涉及到两个判断,a、(判断用户是否已经抢购)如果抢购成功,会标识一个已经抢购成功的信息,就表示他已经抢购过了,就不能在抢购了,b、(判断库存是否充足)如果不充足,返回一个错误信息,告诉用户该库存不足不能在抢购了。
        3、条件不满足,如果上面信息都不满足,比如说用户没有进行抢购,库存也充足的情况下,会用到加锁这个环节,这个是为了防止出现商品抢超的情况,比如说一千个人来抢一件商品,每一个用户抢过一件商品会占用一个库存,占用的库存是不可以被别人访问的。
        4、生成订单信息,这时候就可以生成一个订单信息,将用户信息、商品信息插入订单空中,释放锁,然后给抢购过的那个商品加锁,
        5、支付,订单调用支付接口,比如说订单支付成功了,我们要修改订单的状态,也要删除临时库存      

        6、a、如果超时未支付的话, 会做事务回滚,也要删除临时库存表,redis中所占用的资源要返回,把他所抢的商品给还回去,这时就需要用到一个定时任务,每隔一段时间,看一下,是否超时未支付,如果超时就需要把事务做一下回滚, ( b、如果在高并发的情况下,做一个集群部署,可能会导致服务与服务之间的时间不符,任务调度不一致,服务宕机,然后就需要用到mq做一个延迟队列,延迟多长时间,看一下时间是否超时,)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/6223.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!