我爱LV游 发表于 2026-10-25 18:32:57

兑换的时候抢同一件东西,库存和积分要一起扣掉

一件限量商品放出来,几百人同时点兑换。库存只有十件,怎么确保不多发,也不把人的积分白扣了,这两件事要一起做,只做一件就会出乱子。

一、扣的顺序

先扣库存再扣积分,还是反过来。先扣库存,扣不到就直接返回,用户的分一分没动,体验好,也不会留下要退的账。先扣库存这一步,扣的时候要带上活动标识,同一件商品在两个活动里各有一份库存,不带标识就会扣错那一份。事后要出一份小结,写清发了多少、退了多少、出了什么问题,下次照着改,不写,下次还会在同一个地方摔,摔两次之后没人愿意再接这类活动。

先扣积分再扣库存,库存不够还得退分。退分要时间,中间用户看到分少了,会以为丢了,丢了的印象比慢一点严重得多。活动前要做一次演练,按真实流量压一遍,压完心里有数,没压过就上,等于把活动交给运气,运气这东西靠不住,靠不住的时候损失已经发生了。

二、别用读再写

先查库存再减一,两步之间别人也能查,两个人查到都有货,就都减了,结果超发,超发之后要么补货要么道歉。一条语句里判断并减,写法要看数据库支持到什么程度,支持得不好的时候,用版本号做乐观锁也能顶,顶不住再上队列。这套流程要能复用,每次都重写,写三次之后就没人愿意再接这类活动,没人接就只能临时抓人,抓来的人更不熟,不熟的人更容易出错。

做法是一条语句里判断并减,减不动就说明没了。让数据库确保这一步,别在代码里判,代码里判在多台机器上等于没判。库存和积分要对同一份数据算,两边各算各的,早晚对不上,对不上之后要么多发,要么扣了分没拿到东西,两种都要一条条人工处理。

三、扣了要能退回

库存扣成功、积分扣失败,或者后面的步骤出错,要能整笔退回。退回要自动,别等人发现,等人发现的时候用户已经在问了。退回这件事,该做成定时扫描,扫出中间态的单子自动退,靠出错的时候顺手退,总会漏掉几条,漏掉的要靠人来发现。这套东西要能按活动单独开关,某个活动出问题,关掉它就行,不用把整个兑换入口一起停,一起停伤的是别的活动。

退回也要幂等。同一次失败重试两次,退两遍,库存就多出来了,多出来的库存会被别人兑走,兑走之后账就再也对不上。失败的用户要给补偿方案,哪怕只是一句说明,也比什么都不给强,什么都不给,他会认为这边在装死,装死的印象一旦形成,下次活动他不来了。

四、并发下的排队

几百人同时点,数据库撑不住。前面加一层排队,按先来后到放行,放行的数量跟库存对齐,放多了就超发,放少了就剩货。门槛定完先跑一遍历史数据,看多少人会变级,变太多就得重新定,变级的人一多,客服那边当天就会被问爆,问爆之后连正常咨询都排不进去。

排队要有超时。排太久用户会以为卡住,得告诉他前面还有多少人,有了这个数,他愿意等或者愿意走,都比干等着好。活动页面要能降级,撑不住的时候先关掉非核心的部分,保住下单那一步,那一步保住了,别的都能事后补,那一步垮了,整个活动就白做。

五、结果要能查

用户点完要知道成没成。成功了给凭证,失败了说清原因,是没货还是分不够,两种原因的下一步动作完全不同。

失败原因要说准。一律说活动太火爆,用户不知道该怎么办,下次还来试,试的人越多,那一块的压力越大。值班要安排到活动结束之后,结束那半小时容易出问题,人都散了,出了问题找不到人,找到人也未必有权限处理,没权限就只能等第二天。

六、事后核对

活动结束对一次账:发出多少、扣了多少分、退了多少,三个数要对得上,对不上就说明中间有漏,有漏就得查。

越早查越容易定位,隔几天数据一多就查不动了,查不动就只能认,认了之后这笔账永远挂在那里,下次活动还得绕开它。规则里写清每人限几件,不写,囤货的人一晚上就能把货扫光,扫光之后真正的用户连页面都没打开过,打开过的也只会看到一句已结束。

限量的东西,公平比速度重要。让人知道自己排第几、成没成,比快一秒更有用,快而乱,用户反而更不放心。

2268030878 发表于 2026-10-25 18:32:57

每一条都很实用,已经记下来了,以后遇到类似问题就能用上。

荆轲刺秦亡 发表于 2026-10-25 18:37:54

楼主的经历很有参考价值,给了我很多新的思考方向,非常感谢。

苹果维雅 发表于 2026-10-25 18:41:43

感谢楼主带来这么好的内容,在论坛里能学到东西真的很开心。
页: [1]
查看完整版本: 兑换的时候抢同一件东西,库存和积分要一起扣掉