V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BacGa
V2EX  ›  Java

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

  •  
  •   BacGa · 2019-06-04 16:37:16 +08:00 · 3054 次点击
    这是一个创建于 2035 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景:商城上架 N 种商品(每种每天限量出售 500 件),每日 10:00 开始开放购买,没有任何限制(可以一次性购买任意种类的商品,任意库存内数量,极端情况为某用户直接下单 N*500,一次买空商城)。
    假如存在开售瞬间产生高并发,只考虑订单接口处理速度,不考虑抢购页面静态资源的优化,应该怎么设计比较好?
    1、何时锁定库存?
    2、假如想同步等待下单结果,怎么设计?
    主要是 防超卖,合理锁库存, 非异步设计的话 怎么优化呢?

    感谢参与讨论的各位大佬!
    第 1 条附言  ·  2019-06-05 09:12:24 +08:00
    ---------------------------------------------------------------------------------------------
    追加点问题 redis 做库存预扣,设计不限量购买,库存可能不是-1,怎么把-n 做成原子操作
    9 条回复    2019-10-19 00:46:11 +08:00
    iugo
        1
    iugo  
       2019-06-04 16:44:34 +08:00
    FIFO queue.
    BacGa
        2
    BacGa  
    OP
       2019-06-04 17:15:20 +08:00
    人工顶下
    moodasmood
        3
    moodasmood  
       2019-06-04 17:25:19 +08:00
    点购买,进队列,服务端从队列取数据处理
    index90
        4
    index90  
       2019-06-04 17:26:38 +08:00
    卖完后砍单 :doge
    flxxy
        5
    flxxy  
       2019-06-04 17:45:26 +08:00
    超了就砍 (❀🐔
    或者
    购买库存使用缓存递减,购买库存与实际库存不需要相符,队列处理订单,未支付订单还可以返还成补货,同步等待结果可以单独起个服务,不去影响队列
    npe
        6
    npe  
       2019-06-04 17:54:14 +08:00 via Android
    redis queue 够用了
    mapper
        7
    mapper  
       2019-06-04 17:54:38 +08:00
    初始化时从数据库读取库存数量存到 redis, 用户下单,利用 redis 的 decr 操作预减库存(decr 操作是原子性的,不会有多线程的安全问题), 然后执行商品的预秒杀操作,主要是入队列,这里可以直接返回结果给用户,消费者异步监听执行生成订单等操作, 然后前端使用轮询的方式查到最终的秒杀结果
    BacGa
        8
    BacGa  
    OP
       2019-06-05 08:59:36 +08:00
    感谢各位大佬 我先试试看
    ERRORatDAY1
        9
    ERRORatDAY1  
       2019-10-19 00:46:11 +08:00
    大佬还是多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:10 · PVG 21:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.