秒杀的思路

优化:静态页面

    图片资源采用云存储

     cdn加速

  • 秒杀前
  1. 将秒杀商品的数量存入redis的num队列中,键名为商品sku的id,值为1
  2. 用进入详情页面,判断队列(num与uid队列中是否都没数据)中是否有数据,没有则添加数据,不需要定时任务,减少系统资源的占用(控制进入后台的用户量)
  • 用户点击立即购买
  • 从num队列中lpop一个值
  1. 如果值不为空,在redis的uid队列中lpush用户的id(表示用户可以跳到支付页面)
  2. 如果为空,则告知用户库存不足,不能购买
  • 生成用户订单
  • 对数据库进行减库存操作(考虑高并发)
  1. 使用mysql的悲观锁(for update)对库存进行减操作(注意:必须使用事务,操作失败必须进行回滚操作,否则会发生死锁)
  2. 使用MySQL的乐观锁对库存进行操作(一个字段代表版本号,改之前以及之后的版本号是否相等,利用数据库的原子性)
  • 将订单放入延时消息队列(设置定时任务)
  1. 设置5分钟后查询订单的状态,
  2. 若已经付款,不做操作,
  3. 若用户未支付,则将此用户的id从uid队列中剔除,在num队列中lpush一个1,代表商品数量加一,即回库存
  • 用户支付完成(调用支付时设置过期时间),异步回调改变订单状态,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值