商品卖超

现有的库存中,虽然我们在代码中做了判断,但是再并发情况下还是会出现超卖的情况。
解决方案:减库存的时候判断。

  1. @Update("update seckill_goods set stock_count = stock_count - 1 where goods_id = #{goodsId} and stock_count > 0")

用户多次秒杀

首先再代码中,我们是需要先判断是否已经秒杀成功,但是如果遇到用户并发请求秒杀接口,这时候仅仅靠代码逻辑判断是不够的。
解决方案:添加索引

  1. PRIMARY KEY (`id`) USING BTREE,
  2. UNIQUE INDEX `index_user_id_goods_id`(`user_id`, `goods_id`) USING BTREE

image.png

静态资源优化

1. JS/CSS压缩,减少流量

2. 多个JS/CSS组合,减少连接数

3. CDN就近访问

推荐框架:
Rengine(淘宝开发)、webpack、CDN

接口优化

1. Redis预减库存减少数据库访问

2. 内存标记减少Redis访问

3. 请求先入队缓冲,异步下单,增强用户体验

4. RabbitMQ安装与Spring Boot集成

5. Nginx水平扩展

6. 压测

接口优化思路:

  1. 系统初始化,把商品库存数量加载到Redis
  2. 收到请求,Redis预减库存,库存不足,直接返回,否则进入3
  3. 请求入队,立即返回排队中
  4. 请求出队,生成订单,减少库存
  5. 客户端轮询,是否秒杀成功。