# seckilling **Repository Path**: kayleh_admin/seckilling ## Basic Information - **Project Name**: seckilling - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-13 - **Last Updated**: 2023-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 概要 本文主要介绍高并发下如何处理现有的业务逻辑。一般来说,并发的主要逻辑在数据库,解决方式里最重要的是加缓存。 #### 秒杀业务的主要内容 - 分布式会话 - 商品列表页 - 商品详情页 - 订单详情页 - 系统压测 - 缓存优化 - 消息队列 - 接口安全 #### 技术要点 - 前端 - Thymeleaf - Bootstrap - JQuery - 后端 - SpringBoot - JSR303 - MyBatis - 中间件 - RabbitMQ - Redis - Druid ## 内容 #### 1. 项目框架搭建 1. Spring Boot 环境搭建 2. 集成 Thymeleaf,Result 结果封装 3. 集成 Mybatis + Druid 4. 集成 Jedis + Redis 安装 + 通用缓存 Key 封装 - 通用缓存Key封装 :接口 <—— 抽象类 <—— 实现类(模板模式) #### 2. 实现登录功能 1. 数据库设计 2. 明文密码两次 MD5 处理 - 用户端 :PASS = MD5(明文 + 固定 Salt) - 服务端 :PASS = MD5(用户输入 + 随机 Salt) - md5.min.js 4. JSR 303 参数检验 + 全局异常处理器 5. 分布式 Session #### 3. 实现秒杀功能 1. 数据库设计 2. 商品列表页 3. 商品详情页 4. 订单详情页 #### 4. JMeter 1. JMeter 入门 2. 自定义变量模拟多用户 3. JMeter 命令行使用 4. Spring Boot 打 war 包 #### 5. 页面优化技术 1. 页面缓存 + URL 缓存 + 对象缓存 1. 取缓存 2. 手动渲染模板 3. 结果输出 4. 注:如果是分页,只缓存前一两页 2. 页面静态化,前后端分离 - 常用技术 AngularJs、Vue.js - 优点:利用浏览器的缓存 3. 静态资源优化 - `js/css`压缩,减少流量 - 多个 `js/css` 组合,减少连接数 4. CDN 优化 - 缓存到节点镜像上,总是访问离你最近的镜像 #### 6. 接口优化 1. Redis 预减库存,减少数据库访问 2. 内存标记减少 Redis 访问 3. RabbitMQ 安装与 Spring Boot 集成 4. RabbitMQ 队列缓冲,异步下单,增强用户体验 - 发送者在进行消息发送的时候,并不是直接放到队列里,而是先把消息发送到交换机,由交换机在发送到队列里,做了一个路由。 5. 访问 Nginx 水平扩展 6. 压测 **接口秒杀优化思路** 1. 系统初始化,把商品库存数量加载到Redis 2. 收到请求,redis预减库存,库存不足,直接返回,否则进入3 3. 请求入队,立即返回排队中 4. 请求出队,生成订单,减少库存 5. 客户端轮询,是否秒杀成功 #### 7. 安全优化 1. 秒杀接口地址隐藏 - 秒杀开始前,先去请求接口获取秒杀地址 - 接口改造,带上 PathVariable 参数 - 添加生成地址的接口 - 秒杀收到请求,先验证 PathVariable 2. 数学公式验证码 - 目的 - 防止机器人 - 通过验证码降低瞬间的并发量,分散用户请求 - 步骤 - 添加生成验证码的接口 - 在获取秒杀路径的时候,验证验证码 - ScriptEngine 使用 3. 接口限流防刷(缓存) - 通过拦截器减少对业务的侵入 ## 资料 - [Tengine](http://tengine.taobao.org/):Web服务器项目,类似 Nginx - [webpack](http://webpack.github.io/):打包工具 - [Mycat](http://www.mycat.io/):数据库分库分表中间件