秒杀的大概流程

秒杀场景:
大量用户在同一时间同时进行抢购
怎么去做
1、秒杀相关的活动页面相关的接口,所有查询能加缓存的,全部添加 redis
的缓存;
2、活动相关真实库存、锁定库存、限购、下单处理状态等全放 redis;
3、当有请求进来时,进入活动 ID 为粒度的分布式锁,第一步进行用户购买
的重复性校验,满足条件进入下一步,否则返回已下单的提示;
4、第二步,判断当前可锁定的库存是否大于购买的数量,满足条件进入下
一步,否则返回已售罄的提示;
5、第三步,锁定当前请求的购买库存,从锁定库存中减除,并将下单的请
求放入 kafka 消息队列;
6、第四步,在 redis 中标记一个 polling 的 key(用于轮询的请求接口判
断用户是否下订单成功),在 kafka 消费端消费完成创建订单之后需要删除该
key,并且维护一个活动 id+用户 id 的 key,防止重复购买;
7、第五步,消息队列消费,创建订单,创建订单成功则扣减 redis 中的真
实库存,并且删除 polling 的 key。如果下单过程出现异常,则删除限购的 key,
返还锁定库存,提示用户下单失败;
8、第六步,提供一个轮询接口,给前端在完成抢购动作后,检查最终下订
单操作是否成功,主要判断依据是 redis 中的 polling 的 key 的状态;
9、整个流程会将所有到后端的请求拦截的在 redis 的缓存层面,除了最终能下订单的库存限制订单会与数据库存在交互外,基本上无其他的交互,将数据库 I/O 压力降到了最低;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值