下单减库存是最简单,最精确的一种,下单时直接通过数据库的事务机制控制商品库存,这样一定不会出现超卖的情况。...里,我们先采用lua(预查redis库存->再预扣redis的方式)->乐观锁扣除mysql库存
为什么这里不直接decr预扣redis要用lua先查redis再预扣?...redis里的数据和mysql 的数据的一致性,因此我们要使用一些事务来保证,比如TCC或者MQ事务实现;
这里咱们将mysql库存扣减放到了最后一步也减少了mysql锁竞争的过程了,这性能飞升啊;...第二种方案: 限流,这里的限流不是直接做到接口层面,因为我们是采用是redis预扣库存方式,我们其实不是怕大量流量过来,我们是怕大量流量+大量库存造成了我们redis这时候形同虚设,大量的DML操作在mysql...被阻塞,那么这里我们可以进行限流,突破了redis防线的真正扣减mysql操作需要先申请资源,拿到资源再进行下面的操作,其他的进行拦截或者等待,这个操作可以用哨兵来做;并且这里需要做个稍微精准点的限流,