项目框架搭建:
1.SpringBoot环境搭建
2.集成thymeleaf,封装公共返回bean RespBean
3.MybatisPlus分布式会话:
1.用户登录a.设计数据库b.明文密码二次MD5加密c.参数校验+全局异常处理
2.共享Sessiona.redis功能开发:
1.商品列表
2.商品详情
3.秒杀
4.订单详情系统压测:
1.JMeter
2.自定义变量模拟多用户
3.正式压测a.商品列表b.秒杀页面优化:
1.页面缓存+对象缓存
2.页面静态化,前后端分离秒杀服务优化:
1.redis预减库存减少数据库的访问
2.内存标记减少redis的访问
3.RabbitMQ异步下单a.SpringBoot整合RabbitMQb.交换机模式安全优化:
1.秒杀接口地址隐藏
2.算数验证码
3.接口防刷

===================
github:https://github.com/qykhhhhhhh/seckill
gitee:https://gitee.com/qyk0118/seckill

分布式session如何解决:

1.session复制,对多台tomcat服务器同步session,占用内网带宽,占用内存,同步性能也不好

2.前端存储,不安全,数据大小受cookie限制,占用外网带宽

3.后端集中存储
我们选择redis

SpringBoot如何集成redis:

配置依赖,配置yml
配置redis序列化问题

具体如何实现:

doLogin登录成功时存 key=uuid value=用户对象 到redis中,并在设置cookie为保存uuid(key=uuid,value=uuid值)

页面缓存:

将html页面缓存到redis里,每次从redis中取页面,取得到直接返回页面,取不到要手动渲染并且存到redis中

页面静态化:

页面静态化,ajax动态载入数据,替代了redis缓存页面

RabbitMQ:

生产者的消息都是发给交换机的,不同交换机有不同模式
fanout模式:给绑定了该交换机的队列发消息
direct模式:队列绑定交换机时会关联路由键,当生产者生成消息时可以指定路由键,交换机把消息传到指定路由键的队列
topic模式:direct模式+模糊匹配

RabbitMQ集成springboot

1.添加依赖
2.配置yaml
3.config类配置队列
4.发送者 接收者

秒杀功能:

服务器启动,redis存库存数量(1),开始秒杀,进行重复抢购判断(redis)(粗过滤)
redis进行预减库存(2),当库存抢完时,做一个标记(3),后续秒杀请求进来时就不用进入redis查询了,直接根据这个标记判断,减少redis访问

如果抢到了,把秒杀信息放入RabbitMQ,RabbitMQ很好地进行了削峰,RabbitMQ队列内对每个秒杀请求进行重复抢购判断(redis)(细过滤),如果没问题进入service层进行下单

进行库存判断和库存更新,因为加了事务所以判断和更新具有原子性,如果没库存就直接返回,否则开始生成订单保存到数据库中,数据库使用了索引,所以数据库从表锁变成行锁,并发程度更好

ps: 重复抢购:redis存订单信息,订单信息中包含用户id和商品id,如果两个都匹配,则为重复抢购

ps: 预减库存:decrement方法先减,具有原子性,然后判断redis中库存是否小于0,如果小于0再加回去并设置内存标记,同样是粗过滤,因为先减和判断不具备原子性

秒杀地址隐藏:

秒杀地址隐藏,前端点击秒杀时后端先进行生成与用户id和商品id关联的随机秒杀地址路径,存在redis里,然后将路径传到前端,前端再通过这个路径进行秒杀,后端接收到该路径,对redis查询,如果没有该路径,则无法秒杀

验证码:

验证码,前端刷新一次验证码,都会从后端获取验证码图片,并且后端会把验证码答案存入redis,当客户输入验证码后,答案回到后端进行判断,如果对了则秒杀,错了则提示

接口防刷:

redis实现计数器:redis中存秒杀接口和用户id相关联的key,value是访问次数count,设置他的存活时间很短,每次点击秒杀都会让count+1,当count大于一定值后就会直接抛出访问频繁的提示,以此来接口防刷

Java高并发秒杀系统总结相关推荐

  1. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  2. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

    继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...

  3. SpringBoot、Redis轻松实现Java高并发秒杀系统笔记

    秒杀项目 优极限[完整项目实战]半天带你用SpringBoot.Redis轻松实现Java高并发秒杀系统 文章目录 秒杀项目 技术栈 课程介绍 学习目标 如何设计一个秒杀系统 项目搭建 分布式会话 登 ...

  4. Java高并发秒杀系统【观后总结】

    项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目 我结合其资料和观看视频的时候整理出从该项目学到了什么... 项目Dao层 日志 ...

  5. JAVA高并发秒杀系统构建之——高并发优化分析

    https://blog.csdn.net/yd201430320529/article/details/70544203

  6. java 秒杀 源码 下载_java高并发秒杀系统3-4节秒杀功能实现.mp4

    本Java商城秒杀系统视频教程目录如下:    java高并发秒杀系统1-1节java高并发商城秒杀优化学习指引.mp4 java高并发秒杀系统1-2节项目环境搭建(Eclipse)-节.mp4 ja ...

  7. java商品详情页设计_java高并发秒杀系统3-2节商品详情页上.mp4

    本Java商城秒杀系统视频教程目录如下:    java高并发秒杀系统1-1节java高并发商城秒杀优化学习指引.mp4 java高并发秒杀系统1-2节项目环境搭建(Eclipse)-节.mp4 ja ...

  8. 【在线网课】Java高性能高并发秒杀系统方案优化实战

    java教程视频讲座简介: Java高性能高并发秒杀系统方案优化实战 Java秒杀系统方案优化 高性能高并发实战 以"秒杀"这一Java高性能高并发的试金石场景为例,带你通过一系列 ...

  9. Java高并发秒杀API(四)之高并发优化

    Java高并发秒杀API(四)之高并发优化 1. 高并发优化分析 关于并发 并发性上不去是因为当多个线程同时访问一行数据时,产生了事务,因此产生写锁,每当一个获取了事务的线程把锁释放,另一个排队线程才 ...

最新文章

  1. 五款漂亮的 GNOME 3.4 主题-PPA
  2. 如何成为SEO专家(10步指南)
  3. 计算机辅助园林设计ps,计算机辅助园林设计III
  4. 性能跟踪_ORACLE
  5. python中的列表是采用链式结构实现的_Python数据结构与算法之列表(链表,linked list)简单实现...
  6. 会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...
  7. 热敏电阻如何查表计算温度_简单说说NTC热敏电阻
  8. android 百叶窗动画,android 幻灯片效果之百叶窗
  9. mysql数据库事务传播特性_什么是事务的传播特性?
  10. Ubuntu14.04安装tomcat-9.0.1的教程
  11. javascript函数传参方式
  12. python如何读二进制文件_Python如何读写二进制文件
  13. SCM供应链管理系统有源码可以共享一下吗?
  14. Linux 编jpeg函数,JPEG图形库:libjpeg,在LINUX下如何将jpg转换成bmp
  15. [附源码]计算机毕业设计基于Springboot校园运动会管理系统
  16. 被开了!!!!!!!!!!
  17. 华为二层交换机与路由器对接上网
  18. 讲座报名|美团无人机团队技术分享:大规模、高精度激光SLAM
  19. win10控制面板快捷键_你没玩过的全新版本Win10,这些操作你知多少?
  20. java业务代码自动降级实现

热门文章

  1. Streamsets使用过程中遇到的问题及解决办法
  2. 一图读懂阿里云RDS架构与选型
  3. linux 网卡gso,网卡 offload 简介
  4. npm 是干什么的?(八卦,非教程)
  5. mqtt服务器搭建php,百万级并发 之 MQTT 服务器
  6. 网络安全如何杜绝手机隐私泄密
  7. RabbitMQ的优先级队列
  8. 话里话外:流程落地切忌眉毛胡子一把抓(一)
  9. zblog php 分类页,Zblog首页和分类列表页使用不同的模板
  10. JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC