This topic created in 2534 days ago, the information mentioned may be changed or developed.
场景:商城上架 N 种商品(每种每天限量出售 500 件),每日 10:00 开始开放购买,没有任何限制(可以一次性购买任意种类的商品,任意库存内数量,极端情况为某用户直接下单 N*500,一次买空商城)。
假如存在开售瞬间产生高并发,只考虑订单接口处理速度,不考虑抢购页面静态资源的优化,应该怎么设计比较好?
1、何时锁定库存?
2、假如想同步等待下单结果,怎么设计?
主要是 防超卖,合理锁库存, 非异步设计的话 怎么优化呢?
感谢参与讨论的各位大佬!
Supplement 1 Jun 5, 2019 ---------------------------------------------------------------------------------------------
追加点问题 redis 做库存预扣,设计不限量购买,库存可能不是-1,怎么把-n 做成原子操作
9 replies 2019-10-19 00:46:11 +08:00  | | 1 iugo Jun 4, 2019 FIFO queue. |
 | | 5 flxxy Jun 4, 2019 超了就砍 ( 或者 购买库存使用缓存递减,购买库存与实际库存不需要相符,队列处理订单,未支付订单还可以返还成补货,同步等待结果可以单独起个服务,不去影响队列 |
 | | 6 npe Jun 4, 2019 via Android redis queue 够用了 |
 | | 7 mapper Jun 4, 2019 初始化时从数据库读取库存数量存到 redis, 用户下单,利用 redis 的 decr 操作预减库存(decr 操作是原子性的,不会有多线程的安全问题), 然后执行商品的预秒杀操作,主要是入队列,这里可以直接返回结果给用户,消费者异步监听执行生成订单等操作, 然后前端使用轮询的方式查到最终的秒杀结果 |
 | | 8 BacGa Jun 5, 2019 感谢各位大佬 我先试试看 |