商品卖超
现有的库存中,虽然我们在代码中做了判断,但是再并发情况下还是会出现超卖的情况。
解决方案:减库存的时候判断。
@Update("update seckill_goods set stock_count = stock_count - 1 where goods_id = #{goodsId} and stock_count > 0")
用户多次秒杀
首先再代码中,我们是需要先判断是否已经秒杀成功,但是如果遇到用户并发请求秒杀接口,这时候仅仅靠代码逻辑判断是不够的。
解决方案:添加索引
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `index_user_id_goods_id`(`user_id`, `goods_id`) USING BTREE
静态资源优化
1. JS/CSS压缩,减少流量
2. 多个JS/CSS组合,减少连接数
3. CDN就近访问
推荐框架:
Rengine(淘宝开发)、webpack、CDN
接口优化
1. Redis预减库存减少数据库访问
2. 内存标记减少Redis访问
3. 请求先入队缓冲,异步下单,增强用户体验
4. RabbitMQ安装与Spring Boot集成
5. Nginx水平扩展
6. 压测
接口优化思路:
- 系统初始化,把商品库存数量加载到Redis
- 收到请求,Redis预减库存,库存不足,直接返回,否则进入3
- 请求入队,立即返回排队中
- 请求出队,生成订单,减少库存
- 客户端轮询,是否秒杀成功。