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

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

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小庞同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值