商品秒杀优化流程总结
整个秒杀的业务步骤
前端传递userId和goodsId参数,以及请求头的token
验证请求头token的合法化, 参数由@Valid验证
判断库存是否为空
判断是否重复抢购
调用service,执行秒杀过程
减少库存,sql语句要stock>0
生成秒杀订单和订单详情
将goodsId作为key, userId作为value 存入redis里的Set中,方便判断重复抢购问题
初步优化 ps: 主要目的:减少和数据库的交互(redis), 将生成订单和秒杀解耦(rabbitMQ)
判断合法化
通过redis里的数据,判断是否重复抢购
判断redis里的存库是否大于0 (Controller 实现 InitializingBean,初始化时放入库存)
调用service,执行秒杀过程
通过redis里提前存好的数据,来预减库存
将消息发送给rabbitMQ,异步生成订单.
将goodsId作为key, userId作为value 存入redis里的Set中,方便判断重复抢购问题
最终优化结果 ps:减少和redis的通信,使用lua脚本,增强高并发的安全性
验证内存标记stockmap是否为空
验证token和参数的合法化
验证redis的库存是否为空
验证redis是否重复购买
使用lua脚本预减redis库存
发送秒杀消息至RabbitMQ
rabiitMQ消费者接受消息
判断消息合法性
调用Service层相关方法
service层中生成订单,
service层中减少库存
service层中将
userId
加入redis的Setgoods:id
商品秒杀优化流程总结相关推荐
- 【Java秒杀方案】11.功能开发-【商品秒杀及优化】防止超卖 接口优化(redis预减库存,内存标记减少redis访问,RabbitMQ异步下单) 安全优化(隐藏秒杀接口,验证码,接口防刷)
商品秒杀核心功能及优化 1. 正常秒杀流程 在商品详情页面等待秒杀倒计时–http://localhost:8080/goodsDetail.htm?goodsId=2 倒计时为0,开始秒杀,点[秒杀 ...
- gin redis 链接不上_php + redis 高并发商品秒杀 完整业务模拟流程 实现方案
关于商品秒杀 之前百度了很多关于商品秒杀的业务怎么做,网上的答案真的是五花八门,归纳一下就两种方式 队列或计数器 网上大部分都没有写具体的代码业务 我这里模拟一个业务小场景进行实践 商品:1 每日限量 ...
- api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
前言: 一个整合SSM框架的高并发和商品秒杀项目,学习目前较流行的Java框架组合实现高并发秒杀API 源码获取:关注头条号转发文章之后私信[秒杀]查看源码获取方式! 项目的来源 项目的来源于国内IT ...
- 电商项目实战之商品秒杀
电商项目实战之商品秒杀 定时任务 corn表达式 实现方式 基于注解 基于接口 实战 秒杀系统 秒杀系统关注问题 秒杀架构设计 商品上架 获取当前秒杀商品 获取当前商品的秒杀信息 秒杀最终处理 参考链 ...
- batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...
- 高性能商品秒杀抢购系统
完整资料进入[数字空间]查看--baidu搜索"writebug" Go+iris+rabbbitmq+mysql构建高性能商品秒杀抢购系统 一.项目介绍 1. 课程目标 应用Go ...
- php商品秒杀时间代码,Thinkphp5+Redis实现商品秒杀代码实例讲解
环境:wamp,redis 要求:安装WAMP,Redis,以及为PHP安装Redis扩展 秒杀功能大致思路:获取缓存列表的长度,如果长度(llen)等于0,就停止秒杀,即秒杀失败,如果长度大于0,则 ...
- 四川一度智信:电商平台商品关键词优化技巧
四川一度智信:电商平台商品关键词优化技巧 有关一定网店运营经验的朋友,应该都知道标题对于商品发展来说的重要性.商品标题直接影响了商品的搜索展现情况,进而也就影响了商品的流量获取.因此,标题优化也是卖家 ...
- 【SpringBoot商城秒杀系统秒杀优化学习笔记】
课程介绍 什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到.对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性, ...
最新文章
- 华为实习日记——第二十二天
- Nginx 反向代理及 Cookie 相关问题
- 前端vue框架的跨域处理方法
- Windows中动态磁盘管理
- lt;备份gt;10月12日 内核编译与日志
- snap chrominu has install-snap change in progress
- echart的基本使用方法
- MUI框架学习——了解MUI
- 光机电一体化实训考核装置
- 浅析互联网金融与传统金融的融合发展
- python删除表格重复行_python 删除excel表格重复行,数据预处理操作
- metasploit怎么用? 进阶(msfvenom=payloads+encoders)篇 (゚益゚メ) 渗透测试
- 在线学习算法FTRL基本原理
- FPGA开发基本流程
- 海思Hi3516新增sensor imx214 笔记
- 刺刀还在,理想已经滑落——“中国黑客”10年嬗变
- 6s测试信号软件,手机信号强度测试:苹果iPhone6s不敌三星S6
- typescript Type 'NodeListOfany' must have a '[Symbol.iterator]()' method that returns an iterato
- mysql服务怎么启动和关闭?
- 条件概率,乘法定理,全概率公式
热门文章
- NLP自然语言 - jieba分词库
- 服务器版本的ansys证书错误,关于ANSYS Workbench 出现证书错误的解决办法
- 求字符串的全排列的递归实现(对字符串中有相同字符也适用)
- PS制作两寸照片的疑惑
- 【PowerDesigner】UML建模
- 漏洞修复:Often Misused: Weak SSL Certificate
- 【论文翻译】Automatic Conversion of Road Networks from OpenDRIVE to Lanelets
- win11登不上微软账号
- oracle 加号和不加号,Oracle中连接与加号(+)的使用
- wireshark编译基于openflow1.3协议开发