Java高并发秒杀Api-业务分析与DAO层构建1
章节目录
- 1.为什么使用Spring+Spring MVC+Mybatis
- 2.秒杀业务特性
- 3.秒杀分析过程、优化思路
- 4.相关技术介绍
- 5.基于Maven创建项目
- 6.秒杀业务分析
- 7.秒杀事务的难点分析
- 8.实现秒杀的哪些功能
1.为什么使用Spring+Spring MVC+Mybatis
- 框架易于使用、轻量级
- 对业务代码侵入性低
- 成熟的社区与资料
2.秒杀业务特性
- 秒杀业务场景具有典型的"事务"特性
- 秒杀、红包类需求越来越常见,对竞争资源的访问
- 面试常问的问题
3.相关技术介绍
- MySQL
- 表设计
- SQL技巧
- 事务、行级锁
- MyBatis
- DAO层设计与开发
- MyBatis 合理使用
- MyBatis 与 Spring整合
- Spring
- Spring Ioc 整合Service
- Spring 声明式事务使用
- Spring MVC
- Restful 接口设计与使用
- 框架运作流程
- Controller 设计技巧
- 前端
- 交互设计
- BootStrap
- Jquery
- 高并发
- 高并发点和高并发分析
- 优化思路并实现
4.基于Maven创建项目
1.maven命令创建web项目骨架
mvn archetype:generate -DgroupId=org.seckill -DartifactId=seckill -
DarchetypeArtifactId=maven-archetype-webapp
5.秒杀业务分析
如下图所示:
![](https://yqfile.alicdn.com/img_99c227e45431653ad467b929720cb9c6.png)
所以秒杀业务的核心是对库存的处理。
用户针对库存处理的业务分析
用户的秒杀过程
需要减库存->记录购买明细->组成完整事务->数据持久化
如下图所示:
![](https://yqfile.alicdn.com/img_13ac25ab4051a03aa5c30547d5fe40c2.png)
用户购买行为
记录谁购买成功了->成功的时间及有效期->付款、发货信息
为什么需要事务
![](https://yqfile.alicdn.com/img_c6f7bc86245a8dd40a310c87bc7ff224.png)
如上图所示
1.减了库存,但是没有用户的购买明细,那么就会出现50个商品,但是购买明
细小于50个,到时候发货会发现有些许商品滞留在仓库中,此种情况属于少卖
的情况。
2.记录了明细但是没有减库存,就会发现订单量比商品量要多,出现超卖的情
况,还有一种情况也会导致超卖,多个用户并发修改库存,加入库存量为1,这
个时候多个用户同时去减库存(经过库存量>0的验证),会导致库存为负数,
多个用户抢到同一个商品,这种情况下也会导致超卖发生。
数据落地方案
MySQL VS NoSQL
NoSQL非关系型数据库在事务的支持上并没有关系型数据库可靠。
所以归根结底事务机制依然是目前最可靠的落地方案。
6.秒杀事务难点分析
6.1 难点问题-竞争
![](https://yqfile.alicdn.com/img_fd1f2a76c9e7843bc4a0545c1b59c676.png)
解决方案是采用数据库innodb引擎提供的事务及行级锁。
- 用户减库存的事务流程:
begin; update 库存数量; insert 购买明细; commit;
- 行级锁
如下如所示:行级锁情景分析:
在事务执行过程中,mysql默认的repeateable read 隔离级别会在写操作发生的
行上加上行级锁(非记录加锁,而是在对应索引上加锁,上图中的update加锁
发生在id上),多个写请求并发更新同一行记录会产生如下问题:
因为行级锁在事务结束之后才能释放锁,可能会导致锁等待的发生。数据库吞吐率(事务处理能力)会降低。
所以秒杀的难点是什么?
秒杀的难点是如何高效的处理竞争-如何在保证数据一致性的情况下高效的处理竞争
8.实现秒杀的哪些功能
- 1.秒杀接口暴露
浏览器插件获取秒杀接口,通过脚本去秒杀,保护秒杀接口的一种手段。 - 2.执行秒杀的操作
执行秒杀的业务逻辑 - 3.秒杀查询,商品详情页查询。
其实市面上最主要的几个秒杀思路是:
1.直接在数据库层面做秒杀
2.缓存中存储库存,用户秒杀请求是将缓存中库存与数据库中库存数据同时进行减库存的过程,保证数据一致性是一个难点。
3.缓存中存储有效的减库存操作,队列减库存的的请求依次顺序执行数据库减库存、生成订单明细事务(操作),如小米。
Java高并发秒杀Api-业务分析与DAO层构建1相关推荐
- Java高并发秒杀API(四)之高并发优化
Java高并发秒杀API(四)之高并发优化 1. 高并发优化分析 关于并发 并发性上不去是因为当多个线程同时访问一行数据时,产生了事务,因此产生写锁,每当一个获取了事务的线程把锁释放,另一个排队线程才 ...
- Java高并发秒杀API(三)之Web层
Java高并发秒杀API(三)之Web层 1. 设计前的分析 Web层内容相关 前端交互设计 Restful规范 SpringMVC Bootstrap + jQuery 前端页面流程 详情页流程逻辑 ...
- SpringBoot实现Java高并发秒杀系统之DAO层开发(一)
SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...
- api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...
- SpringBoot、Redis轻松实现Java高并发秒杀系统笔记
秒杀项目 优极限[完整项目实战]半天带你用SpringBoot.Redis轻松实现Java高并发秒杀系统 文章目录 秒杀项目 技术栈 课程介绍 学习目标 如何设计一个秒杀系统 项目搭建 分布式会话 登 ...
- SpringBoot实现Java高并发秒杀系统之Service层开发(二)
继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...
- Java高并发秒杀系统【观后总结】
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目 我结合其资料和观看视频的时候整理出从该项目学到了什么... 项目Dao层 日志 ...
- java高并发秒杀活动的各种简单实现
最近遇到比较多数据不一致的问题,大多数都是因为并发请求时,没及时处理的原因,故用一个比较有代表性的业务场景[活动秒杀]来模拟一下这个这种高并发所产生的问题. 众所周知,电商系统的秒杀活动是高并发的很好 ...
- Java高并发秒杀平台(Redis + RabbitMQ)
Seconds-Kill 本项目是一个模拟高并发环境下基于 SpringBoot 的秒杀购物平台.为了减少对数据库的直接访问,通过 Redis 实现了缓存优化:并通过 RabbitMQ 消息中间件来接 ...
最新文章
- 明星企业内推+BAT面经,长三角的开发者联合起来!
- 基于vue的公共looploading组件(vue循环加载--组件)
- IT技术能治病救人-数据是21世纪最伟大的药物
- 使用 Finder预览功能,让你可以快速浏览多个文件
- 那个linux系统自带应用商店,如何在荣耀笔记本(Linux版)中拥有deepin应用商店?...
- pandas缺失值处理
- linux监听端口丢失,查看 linux 端口 监听
- uni-app android白屏,uniapp页面跳转出现白屏怎么办
- 指针(小破站-王道训练营P18的例题)
- 360携手HarmonyOS打造独特的“天气大师”
- aardio - MsSql数据库+虚表示例
- 闲鱼是怎么让二手属性抽取准确率达到95%+的?
- Python学习笔记:part 1
- 认知层次不同的人,是很难沟通的
- 如何一行代码安装ROS|2022最新版|一行代码安装ROS2|一行代码解决rosdep|一行代码配置多ROS环境
- EM算法-数学原理及其证明
- Android MTK LCM Driver 屏驱动
- 保存淘宝商品图片的方法
- Unity3D+SignalR实现实时数据传输
- 三极管基极电阻的确定方法
热门文章
- 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
- UITableView-FDTemplateLayoutCell自动计算UITableView高度的使用
- JavaBean fields TO ExtjsMode fields
- android 仿人人网滑动侧边栏
- Linux启动报错UNEXPECTED INCONSISTENCY解决方法
- android 输入法的显示和隐藏
- 解决Apache 服务器不支持FLV视频播放的办法
- ClickHouse 在广告系统场景中的实践
- Bootstrap table 行编辑导航
- h5 时间控件问题,怎么设置type =datetime-local 的值