一个简单的秒杀框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Arthur_Lees/article/details/86097876

场景描述:某电商需要对几款商品创建一个秒杀促销,每笔订单只可购买一件商品。

流程图

设计思路

  1. 简单实现主流程,完成商品下单

     数据库设计:商品表(product_info)订单表(order_info)

service层实现:

1.下单操作

2.校验库存 :获取商品stock_num数量

3.扣减库存 :sale_num加1不大于stock_num

4.下单完成

这样的流程,看似是一个很完整的下单流程,当发生大量并发操作时,就会出现超卖情况

解决超卖的一种简单方式就是增加乐观锁乐观锁不会对数据上锁,其他请求仍可访问数据,悲观所是给数据上锁独占,乐观锁的原理简单说可以理解为版本号,例如:线程请求时会得到这条数据的version=1.0,然后对version=1.0的数据做修改操作,同时修改版本号 version=1.1并提交;当A、B两个线程同时访问统一条数据,同时获得数据且版本号为1.0,当A线程先完成了修改操作,对版本号为1.0的数据做了修改,并修改了版本号为1.1后提交,这时B线程完成处理逻辑,要去修改手里版本好为1.0的数据时,已经查不到了这条数据,修改失败,锁生效

2.增加锁机制

ALTER TABLE `product_info` 
ADD COLUMN `version` BIGINT(20) NOT NULL DEFAULT 1 ;

猜你喜欢

转载自blog.csdn.net/Arthur_Lees/article/details/86097876