黑马点评07 秒杀优化 加阻塞队列

实战篇-22.秒杀优化-异步秒杀思路_哔哩哔哩_bilibili

1.流程回顾

1.1超卖问题

判断秒杀时间,加乐观锁(比较标记/版本),检查库存是否大于0        

1.2一人一单问题

看看数据库里有没有这个这个人下的订单:

1.单机模式中加悲观锁sychronized,锁监视器和用户线程id字符串绑定,购买之前检查。

2.多线程模式有并发安全问题,要加分布式锁才能在不同jvm之前唯一标识一把锁,

通过uuid + 线程id去唯一标识一个线程,避免其他线程误删;

通过lua脚本保证原子性(加锁和设置过期/线程id判断和解锁)

黑马点评06分布式锁 2Redisson-CSDN博客

多线程分布式锁可以用Redission来替代,并且能够解决 重试、重入、超时刷新(看门狗)机制

2.并发模拟测试jmeter

创建好1000个token(用户),放到txt文件。

在jmeter里指定该文件作为token来源,就能模拟1000个用户

因为之前每一步是串行操作的,其中有大量的数据库操作会很影响效率,所以把资格判断和下单业务分离开。 

实战篇-23.秒杀优化-基于Redis完成秒杀资格判断_哔哩哔哩_bilibili

3.优化后流程

4.新增优惠券

调用crud

5.基于Lua脚本,判断秒杀库存、一人一单,决定用户是否抢购成功

新lua脚本

6.如果抢购成功,将优惠券id和用户id封装后存入阻塞队列

因为流程改了,所以原来很多java业务转到lua脚本里去了,需要改造代码。

大致流程

具体操作

6.1阻塞队列

没有元素的时候取对象会阻塞,直到有新内容进来。

6.2开启异步下单线程(线程池)

 7.新流程

        1.先判断资格,有资格就创建订单对象(但没有下单到数据库)把订单加到阻塞队列,否则返回错误。这里用户已经得到结果了,理论上用户知道自己能不能下单。

        2.然后执行异步下单,类初始化执行线程池。线程池里的线程不断从阻塞队列取出需要下单的订单信息,然后去进行下单数据库操作。 

1)阻塞队列在jvm里,内存有限,订单多了容易溢出

2)如果订单加入阻塞队列,但是服务宕机了,订单会丢失

这里使用的阻塞队列很简单,容易出现很多问题,所以后面引入消息队列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286508.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式布局2:手写响应式导航栏(BootStrap实现以及原生实现)

1.响应式导航栏介绍 响应式导航栏是一种在不同设备和屏幕尺寸下自适应布局和显示的导航栏。它可以根据用户所使用的设备(如桌面电脑、平板电脑或手机)自动调整其外观和交互方式,以提供更好的用户体验。 pc端: 手机端&#xff1a…

uniapp笔记

/pages/component/swiper/swiper /pages/component/button/button navigator image 设置界面标题 页面跳转 设置TabBar 发起一个请求 网络请求

xcrun: error: invalid active developer path

macOS升级完成后出现 xcrun: error: invalid active developer path问题。 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun这是由于 Xcode command line tools 丢…

从零开始掌握MAYA 2022:打造视觉创意的艺术大师之路

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 Autodesk Maya是一款强大的三维计算机图形软件…

南大通用GBase 8c荣膺“2023年度技术卓越奖”

摘要 近日,国内专业数据库及架构技术社区ITPUB、IT垂直门户IT168联合主办的《2023技术卓越奖》评选结果正式揭晓,凭借安全可靠、稳定易用的技术优势,GBASE南大通用多模多态分布式数据库GBase 8c斩获数据库行业技术卓越奖。 作为引领技术创新…

RocketMQ系统性学习-RocketMQ原理分析之NameServer 路由注册机制、生产者的发送消息流程

文章目录 NameServer 路由注册机制生产者的发送消息流程 NameServer 路由注册机制 在 Broker 启动时,通过 BrokerController.this.registerBrokerAll(true, false, brokerConfig.isForceRegister()); 向 NameServer 中注册自己 那么 NameServer 中,注册…

功能点估算的常规流程

功能点估算流程在软件项目管理中起着重要的作用,它可以帮助项目团队更好地理解项目的需求和目标,从而提高项目的成功率和效率。如果功能点估算未按流程进行,可能会导致项目估算不准确,估算时间超出预期等问题。 因此功能点估算的常…

Authorized users only. All activities may be monitored and reported.

“Authorized users only. All activities may be monitored and reported.”是SSH隧道建立成功的提示,如图1所示。 图1 建立SSH隧道(成功提示) 如果SSH隧道建立失败,会在这个提示下显示“Permission denied”、“Connection clo…

微信私域管理工具如何帮助企业提升销售业绩?

现如今,微信已经从社交通讯软件,慢慢被默认为常规办公软件,工作沟通、业务洽谈、网络会议等都在微信上进行,完全变成职场首选的社交工具。 但受限于微信平台,许多公司在微信私域营销方面面临诸多挑战。 微信私域管理工…

【vSphere | PowerCLI】使用 PowerCLI 连接 vCenter 查看 VM 故障排错

这里写目录标题 1. 连接vCenter Server2. 客户机操作系统内提供网络配置信息3. 创建VM4. 迁移VM5.故障排错连接 VC 报错: Error: Invalid server certificate解决方法 参考资料 1. 连接vCenter Server PS C:\Users\Administrator> Connect-VIServer 192.168.1.1…

史上最细,老鸟软件测试-接口测试总结,看这篇就够了

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 后端接口都测试什…

工作纪实38-排查cpu彪高

昨天晚上上线了一个服务,第二天发现CPU持续飙高到70~90%,触发平台的自动扩容,后定位出问题后降低到3% 怀疑部分代码使用的线程在持续工作没有释放(死循环)进入机器,使用top -H 找出系统中使用C…