项目介绍:
秒杀系统其实是针对商品库存做的系统。用户成功秒杀商品,对于系统的操作就是减库存和记录下单明细。技术栈:
前端:Thymeleaf 、Bootstrap、Jquery
后端:SpringBoot 、MybatisPlus 、mysql中间件:RabbitMq 、Redis
压测工具:Jmeter功能模块:
1.超买解决:
(1)下单成功时把用户 id +商品 id 作为 key 存进 redis ,再次购买时校验 key 是否存在,实现一个用户只能购买一次同一商品,从而实现减少数据库的访问量 。
(2)在数据库的秒杀订单表为 userId 、goodsId 添加联合索引解决超买
2.超卖解决:
减库存时,在 sql 语句条件后添加库存大于0,原子性操作解决超卖问题
3.接口优化: (1)页面优化:
页面缓存:每次都是请求 thymeleaf 渲染可以用缓存 ,存进整个页面 从 redis 中取页面设置超时时间60秒
(2)服务优化:
下单之后采用 RabbitMQ 进行异步插入用户收货地址信息,提升响应速度
(3)安全优化:
隐藏秒杀地址:点击秒杀按钮会请求到后端,随后产生随机 path 并以 key为 seckill+userId+goodsId 存入 redis ,页面请求成功会发送请求到真实秒杀地址,并且通过获取到的 value 校验 path 是否正确
接口防刷:秒杀前需要图形验证码 ,用户输入的结果有快有慢 ,可以以一定的减少数据库的访问量
接口限流:基于 redis的 string 数据结构实现接口限流 ,控制每个用户每1s内只能请求1次接口 ,缓解服务器压力