一、秒杀项目总结

1.1 项目框架搭建

  • SpringBoot环境搭建
  • 集成Thymeleaf,RespBean
  • Mybatis

1.2 分布式会话

  • 用户登录

    • 设计数据库
      用户表:账户id,密码,加密盐等
    • 明文密码二次MD5加密
      第一次是因为http明文传输需要加密,第二次是防止数据库被盗
    • 参数校验+全局异常处理
      通过对输入的参数LoginVo加注解@validated,然后在传入的参数mobile和password上加上注解判断是否为空
      全局异常处理为了提示用户出现的异常
  • 共享Session
    • SpringSession
    • Redis

1.3功能开发

  • 商品列表
    为了展示商品信息,需要封装GoodsVo,来展示商品信息,包括价格,库存,秒杀起止时间等
  • 商品详情
    同样需要GoodsDetailsVo
  • 秒杀
    在控制层先判断库存,在redis中预减库存,然后判断订单是否存在,发送请求 到消息队列,后创建订单
  • 订单详情
    创建OrderVo

1.4 系统压测

  • JMeter
  • 自定义变量模拟多用户
  • 正式压测
    • 商品列表
    • 秒杀

1.5 页面优化

  • 页面缓存+URL缓存+对象缓存

    1. 秒杀的瓶颈在数据库,所以要加上各种粒度的缓存,最大的是页面缓存、最小的是对象缓存
    2. 页面缓存步骤(商品列表)
      从redisService中取缓存,如果缓存中没有则利用thymeleaf手动渲染页面,然后将页面加入缓存,并返回渲染页面。
    3. URL缓存(商品详情页)
      与页面缓存步骤基本一致,但是需要取缓存和加缓存时加上参数商品ID
    4. 对象缓存(User)
      前面的页面缓存和URL缓存适合变化不大的,缓存时间比较短的。对象缓存是长期缓存。第一步是取缓存,若缓存没有,则去数据库中查找,并加入缓存;如果数据库中没有,则抛出异常。
  • 页面静态化,前后端分离
    1. 页面静态化就是使用纯HTML页面+Ajax请求json数据后再填充页面
    2. 若A页面跳转到B页面之前需要条件判断可以先再A页面中利用ajax请求判断后再跳转
    3. 不需要的话可以直接跳转到B页面,由B页面自己发起ajax请求
  • 静态资源优化

1.6 接口优化

  • Redis预减库存,减少数据库访问
  • 内存标记,减少Redis访问
    在系统初始化的时候加载商品库存到redis中进行标记,判断库存时不需要去数据库读取,直接在redis中进行读取
  • RabbitMQ异步下单
    • SpringBoot整合RabbitMQ
    • 交换机

1.7 安全优化

  • 秒杀接口地址隐藏
    前端页面在秒杀未开始时秒杀按钮设置为不可用,可是有可能有用户通过前端js代码找到秒杀地址,在秒杀未开始前直接访问,秒杀接口隐藏的目的是用户通过js获取到的秒杀地址不能让他进行秒杀操作
    在秒杀开始之前通过Controller中的/path路径下的类随机生成一个path,然后和用户ID、商品ID一起存入redis。在执行秒杀的时候再从redis中取path进行验证,然后再进行秒杀
  • 算术验证码
  • 接口防刷
    当用户访问接口时,把访问次数写入缓存,并设置有效期。一分钟内记录访问次数,如果超出限制,则进行限流操作。如果没有超限,则缓存消失,下次访问时再重新写入缓存

1.8 秒杀流程

  1. 登录进入商品列表页面,静态资源缓存进redis
  2. 点击进入商品详情页面,静态资源缓存进redis,通过Ajax获取验证码等动态信息
  3. 点击秒杀,将验证码结果和商品ID传给后端,如果正确。动态生成UUID,加上用户ID和商品ID存入redis,并将路径path传到前端。前端根据path地址调用秒杀服务
  4. 服务端获取请求的path参数,查询是否存在缓存
  5. 存在的话,且redis中还有库存信息,则在redis中进行预减库存,看是否生成订单,没有的话,将请求发送到消息队列
  6. 从消息队列中获取消息:获取商品ID,用户ID,进行下单操作
  7. 下单操作:减库存,生成订单
  8. 前端轮询订单生成结果和秒杀成功与否

二、项目重难点

秒杀接口高并发的实现、以及安全优化

三、项目推荐

在做完秒杀或者谷粒商城后,想自己做个个性化的项目一般选择什么?可以根据亮点和难点来进行设计。

3.1 项目亮点设计

  • 代码质量
    比如做单元测试,测试代码覆盖率
  • 项目上线
    部署到云上
  • 制造事故现场,压测现场
    比如加缓存,性能提升多少倍

3.2 项目难点设计

  • 制造内存泄漏OOM的Bug,然后制造排查、修复的过程
  • 制造并发问题,比如出现死锁、HashMap导致并发,换成ConcurrentHashMap、原子类、volatile
  • 流量突增问题,蓄洪泄洪

【学习笔记】seckill-秒杀项目--(11)项目总结相关推荐

  1. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    Hadoop学习笔记-20.网站日志分析项目案例(一)项目介绍 网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edis ...

  2. Tomcat学习笔记02【Tomcat部署项目】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  3. CMake 学习笔记 02 - 更复杂的项目

    CMake 学习笔记 02 - 更复杂的项目 源代码见 https://github.com/fengyc/cmake-tutorial 源代码目录组织 一般的项目,会划分为多个子目录,每个子目录中包 ...

  4. C语言学习笔记第五天_项目训练

    C语言学习笔记第五天_项目训练 添加自定义的一个函数库文件 <getch.h> 步骤: 1.在windows中把getch.h放入共享文件夹(文件我放在文末,自取) 2.在Ubuntu终端 ...

  5. PMBOK(第六版) 学习笔记 ——《第七章 项目成本管理》

    系列文章目录 PMBOK(第六版) 学习笔记 --<第一章 引论> PMBOK(第六版) 学习笔记 --<第二章 项目运行环境> PMBOK(第六版) 学习笔记 --<第 ...

  6. 「学习笔记」品优购项目-上(页面公共部分 )

    「学习笔记」品优购项目-上 品优购项目-上 目标 品优购项目规划 网站制作流程 品优购项目介绍 品优购项目的学习目的 开发工具以及技术栈 开发工具 技术栈 品优购项目搭建工作 创建的文件夹如下(称为项 ...

  7. 深度学习笔记(29) 1×1 卷积

    深度学习笔记(29) 1×1 卷积 1. 1×1 卷积 2. 1×1 卷积的作用 3. 1×1 卷积的应用 1. 1×1 卷积 在架构内容设计方面,其中一个比较有帮助的想法是使用1×1卷积 过滤器为1 ...

  8. oracle 11g dul,【学习笔记】Oracle DUL 11 兼容Oracle 12C数据库的DUL工具最新版本

    天萃荷净 oracle dul 11 正式发布,迫不及待的下载来测试,现在版本号为dul 11.2.0.0.1,目前只发布了for linux,其他版本估计要等等.期待该版本有引进新功能 1.orac ...

  9. 【PMP学习笔记】:三、项目经理角色

    个人学习笔记,仅供参考学习使用,请勿用于其他用途,喜欢就给个三连. PMPBok版本:第六版 (十年一个版本更新,2021年第七版上线) 第六版与第七版的区别:第七版增加了更多敏捷开发的内容,详细见附 ...

  10. 【PMP学习笔记】:二、项目运行环境

    个人学习笔记,仅供参考学习使用,请勿用于其他用途,喜欢就给个三连. PMPBok版本:第六版 (十年一个版本更新,2021年第七版上线) 第六版与第七版的区别:第七版增加了更多敏捷开发的内容,详细见附 ...

最新文章

  1. Lesson11 vSphere VUM
  2. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理
  3. EntityFramework之摸索EF底层(八)
  4. React Native之react-native bundle --platform android --dev false --entry-file index.js --bundle失败
  5. 使用D9的SetFVF无法控制数据字段在内存中的顺序,所有字段的顺序都是固定的。自能选择好用还是不用。...
  6. 吴恩达 深度学习 编程作业(1-2.1)- Python Basics with Numpy
  7. 看视频课程的正确方法
  8. mysql数据库存储多语言_数据库---数据控制语言(DCL)
  9. 房子怎么拆除_新规,可能拆除农村这4类房子,每户家庭可能获得40万
  10. JAVA集合系列(3):ArrayList扩容原理分析
  11. 阿里云图标icon使用symbol 引用方式
  12. 国外量化投资的经典案例
  13. 大佬都是怎么画交换机拓扑图的?都给你整理好了
  14. 半导体术语-什么CIM
  15. 键盘的某些键坏了咋办(如delete键等)
  16. AutoCAD家具设计入门到精通视频教程
  17. uniapp跨域设置
  18. 一次简单的 HTTP 调用,为什么时延这么大?
  19. 跟小博老师一起学JSP ——EL表达式
  20. linux nvme文件系统,Intel NVMe驱动器扇区大小不是4096的xfs文件系统的性能下降

热门文章

  1. PPT怎么修改母版背景
  2. 微波射频工程师必读经典参考书
  3. 什么时候你想逃离北上广?
  4. Cookie、Session 简述
  5. win10装linux双系统6,win10如何安装linux双系统
  6. 如何做一个基于微信驾校考试小程序系统毕业设计毕设作品
  7. 单交换机配置vlan
  8. 夜深人静写算法(二) - 动态规划
  9. 我用计算机的故事,计算机老师的我的教育故事随笔
  10. 创意火焰燃烧效果PS动作