秒杀系统如何保证数据库不崩溃以及防止商品超卖

秒杀系统如何保证数据库不崩溃以及防止商品超卖

1、应用场景

电商商城,商家上架了一个秒杀活动,早上10点开始,商品A参与秒杀,一共有20个库存,预计10W的人去抢。

 

2、面临问题

高并发、库存不可超卖

 

3、问题解决

1)高并发,我们不能把所有的请求都去数据库查商品详情,查商品库存,这样数据库会顶不住,很容易的我们就想到了用Redis解决;

2)库存超卖问题,这个问题主要是由于用户在同时读取到的库存均为大于0,从而认为我们该商品还没被秒完,继续创建了订单,导致了商品超卖了。 

 

4、编码实现  

1、数据库新建两张表

秒杀订单

CREATE TABLE `ms_order` (
  `ms_order_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "订单ID",
  `created_time` datetime DEFAULT NULL COMMENT "创建时间",
  `order_price` decimal(12,2) DEFAULT NULL COMMENT "订单总价",
  `state` tinyint(1) DEFAULT "1" COMMENT "订单状态 1未支付 2已支付 3已发货 4已收货 -1已取消",
  `pay_time` datetime DEFAULT NULL COMMENT "支付时间",
  `fh_time` datetime DEFAULT NULL COMMENT "发货时间",
  PRIMARY KEY (`ms_order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT="秒杀订单";
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 秒杀系统如何保证数据库不崩溃以及防止商品超卖