秒杀系统(七)——库存操作

247 阅读2分钟

这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战

前言

关于秒杀系统的一个非常重要的因素——库存操作,秒杀系统的商品是卖家限量的,假如库存是100件,那就是卖100件,一件都不能多卖,就是我们经常所说的,一定不能超卖。那么在秒杀系统中,我们要如何对库存进行操作呢。

库存操作

首先,做过一些关于电商相关系统的同学,如果用户量和并发并不高的话,可能就直接使用数据库行锁来控制库存的超卖,但是一旦用户量和请求巨大的时候,数据库根本无法支撑这么大的并发量,很有可能系统就直接崩溃了,无法提供服务了。那么我们关于库存操作通常有以下几种形式

下单直接减库存:买家下单后,直接在库存中减去对应的购买数量,通过数据库的事务机制操作库存,但是这个有个问题,有些买家下单后,他可能不付款,导致库存数量被占用,使得其他买家无法购买。

付款直接减库存:买家下单成功后,并不会真正的减去库存而是到付款成功后,才真正的减去库存,付款减库存可能会导致库存超卖,只有100件商品,500人都下单成功了,但是到最后只有100人付款成功,导致用户体验感变差,对平台的口碑也会有所影响。

预扣库存:预扣库存是结合两种的优点来进行的,首先买家可以下单,下单成功后,为这位买家保留这个库存的名额,但是下单后到付款会有对应的时间限制,例如15分钟,超过时间后,订单将被释放。可以让其他买家购买,只有付款成功后,才真正的减库存操作。

因为在秒杀活动中,会有很多秒杀器或者脚本会恶意下单,保留订单名额,所以还需要做额外的保障,例如对秒杀商品,一个人只能下一单,订单释放后不能再次下单。对该账号过去的下单行为进行大数据分析,看是否是秒杀脚本行为的账号。可以对此类账号进行标记。此类账号下单后并不减库存。保证正常用户的权益。

结论

库存数量是秒杀系统中无论如何都要保持正确的数据。任何时候都要保证这些数据的准确性,可回溯。