Skip to content

基于SpringBoot + MySQL + Redis + RabbitMQ开发的高并发商品限时秒杀系统

Notifications You must be signed in to change notification settings

little-eight-china/springboot-seckill

Repository files navigation

基于SpringBoot + MySQL + Redis + RabbitMQ开发的高并发商品限时秒杀系统

基本信息

本系统是使用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,保证不会爆库

页面截图

About

基于SpringBoot + MySQL + Redis + RabbitMQ开发的高并发商品限时秒杀系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published