本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。
本项目包括四个子项目,分四个阶段,一步一步构建起整个秒杀系统。你可以逐步去了解每个阶段实现的东西,继而加深对知识的运用。
第四个子项目是最终稳定版本。
后期的话将会加入第五个子项目,所有后续优化也全在第五个子项目。
idea 2017.2
JDK | SpringBoot |
---|---|
1.8 | 1.5.8.RELEASE |
- 前端技术 :Bootstrap + jQuery + Thymeleaf
- 后端技术 :SpringBoot + MyBatis + MySQL
- 中间件技术 : Druid + Redis + RabbitMQ
- 压测技术 :JMeter
逐步了解每个阶段,一步步带你深入秒杀系统
- 第一阶段 初建模型
- 第二阶段 页面基本实现+压测
- 第三阶段 优化访问速度
- 第四阶段 加入消息件
- 第五阶段 未知
- 启动项目前,启动好数据库跟redis(后期的话加上rabbitmq)
- 配置好application.yml里以上相关信息
- 每个阶段都可独立运行项目,端口8080到8083,http://localhost:808x
-
通过UUID生成唯一id作为token,HandlerMethodArgumentResolver实现token共享,记住用户登录
-
用户密码用MD5加密保存
-
使用JSR303自定义校验器,实现对用户账号、密码的验证,使得验证逻辑从业务代码中脱离出来。
-
自定义异常类,捕捉的异常可以自定义返回错误信息,正确定位异常信息
-
对象缓存、页面缓存、页面静态化
- 页面缓存:通过在手动渲染得到的html页面缓存到redis
- 对象缓存:包括对用户信息、商品信息、订单信息和token等数据进行缓存,利用缓存来减少对数据库的访问,大大加快查询速度。
- 页面静态化,加快页面展示,提升用户体验
-
使用HandlerInterceptorAdapter实现秒杀接口限流,防止恶意请求
-
秒杀优化
- 通过本地标记redis预处理、RabbitMQ异步下单,最大力度减少对数据库的访问。
- 点击秒杀前,先让用户输入数学公式验证码,验证正确才能进行秒杀,减少并发量
-
解决超卖
- 设置redis预减库存,抢先一步判断库存是否充足
- 秒杀操作sql语句加上seckill_stock > 0,保证不会爆库