V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
BacGa
V2EX  ›  Java

[商品秒杀设计] 多类型 -无限购 -的秒杀方案设计,求讨论

  •  
  •   BacGa · Jun 4, 2019 · 3686 views
    This topic created in 2521 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
    iugo
        1
    iugo  
       Jun 4, 2019
    FIFO queue.
    BacGa
        2
    BacGa  
    OP
       Jun 4, 2019
    人工顶下
    moodasmood
        3
    moodasmood  
       Jun 4, 2019
    点购买,进队列,服务端从队列取数据处理
    index90
        4
    index90  
       Jun 4, 2019
    卖完后砍单 :doge
    flxxy
        5
    flxxy  
       Jun 4, 2019
    超了就砍 (❀🐔
    或者
    购买库存使用缓存递减,购买库存与实际库存不需要相符,队列处理订单,未支付订单还可以返还成补货,同步等待结果可以单独起个服务,不去影响队列
    npe
        6
    npe  
       Jun 4, 2019 via Android
    redis queue 够用了
    mapper
        7
    mapper  
       Jun 4, 2019
    初始化时从数据库读取库存数量存到 redis, 用户下单,利用 redis 的 decr 操作预减库存(decr 操作是原子性的,不会有多线程的安全问题), 然后执行商品的预秒杀操作,主要是入队列,这里可以直接返回结果给用户,消费者异步监听执行生成订单等操作, 然后前端使用轮询的方式查到最终的秒杀结果
    BacGa
        8
    BacGa  
    OP
       Jun 5, 2019
    感谢各位大佬 我先试试看
    ERRORatDAY1
        9
    ERRORatDAY1  
       Oct 19, 2019
    大佬还是多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 21:07 · PVG 05:07 · LAX 14:07 · JFK 17:07
    ♥ Do have faith in what you're doing.