论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Springboot实战——黑马点评之秒杀优化
Springboot实战——黑马点评之秒杀优化
篮之新喜
金牌会员
|
2024-9-28 16:37:57
|
显示全部楼层
|
阅读模式
楼主
主题
866
|
帖子
866
|
积分
2608
Springboot实战——黑马点评之 秒杀优化
1 秒杀优化
先来复习以下,秒杀优惠券业务的现有实现逻辑:
以上流程图中的操纵串行执行,效率极低。
其中
判断秒杀库存
以及
校验一人一单
属于对数据库的读取,耗时较少;
扣减库存
以及
创建订单
属于对数据库的写操纵,耗时相对较久。
提拔效率的方法我们可以考虑两个方面:
1)引入并发(
开启多线程
):主线程负责读取操纵,如果读取查验资格通过,则
开启另外的线程负责写操纵
2)引入
Redis缓存
:可以将订单信息以及秒杀券信息存入Redis,在
Redis中查验资格
后,将符合资格的优惠券id+用户id+订单id存入
阻塞队列
,单独开启第二线程来读取阻塞队列执行写操纵,即刻给用户返回下单订单号。
1.1 引入Redis进行资格查验
资格查验分为
查抄库存是否充足
以及
用户是否下单过该优惠券
两个操纵,如果引入Redis来实现,要考虑:
秒杀券库存导入Redis,并且要数据及时更新同步,即 在查验资格通过后必要将Redis中的券库存-1
下单记录:使用的数据结构必要满足
1 集合;2 元素唯一性
使用Redis中的set范例来缓存下单该优惠券的用户id集合,并且要保证数据及时更新同步,即 在查验资格通过后必要向set中添加用户id
以上所考虑的几点还必要保证
操纵的原子性
,以是使用Redis的Lua脚本来实现。
Lua脚本必要的
ARGV参数列表
中有两个待定参数,分别是
优惠券id
以及
用户id
,其他的业务逻辑均调用Redis命令即可实现
[code]-- 1. 参数列表-- 1.1. 优惠券id 用于查询优惠券库存时的关键字local voucherId = ARGV[1]-- 1.2. 用户id 用于将查询下单用户对比local useId = ARGV[2]-- 2. 数据key-- 2.1. 库存key + 业务前缀 拼接 优惠券idlocal stockKey = 'seckill:stock:' .. voucherId-- 2.2 订单keylocal orderKey = 'seckill
rder:' .. voucherId-- 3. 业务执行-- 3.1 起首判断库存是否充足if(tonumber(redis.call('get', stockKey)) 斲丧者组以
最后一个被获取的消息标识
($),读取队列中还没被斲丧的消息,并设置2秒内阻塞式(|block)读取 -> 如果阻塞等待时间内并未拿到最新消息则
continue
-> 如果阻塞等待时间内获取到新消息,则按下单业务将其处理
捕捉非常 -> 意味着此时pending-list中存在
已被斲丧但未被处理完毕
的消息 -> 循环从pending-list中
获取第0号消息
(非阻塞式,0)来尝试继续处理 -> 如果获取到尚未处理过的消息,则按正常下单业务继续处理 -> 如果没有非常停止的消息则
结束非常捕捉
业务
如果捕捉非常过程中
又碰到非常
-> 继续循环读取pending-list</p>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
篮之新喜
金牌会员
这个人很懒什么都没写!
楼主热帖
XtraBackup 搭建从库的一般步骤及 Xtra ...
Docker三剑客之Machine
通过Go语言创建CA与签发证书 ...
[回馈]ASP.NET Core MVC开发实战之商城 ...
rustdesk自建服务器总是掉线 未就绪, ...
8行代码实现快速排序,简单易懂图解! ...
Java毕业设计-音乐管理系统
三天吃透Kafka面试八股文
LyScript 从文本中读写ShellCode
spring boot 集成 flowable + mybatisp ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表