当前位置: 首页 > news >正文

黑马点评:Redis消息队列【学习笔记】

目录

当前业务存在的问题

认识消息队列

List

PubSub (publish subscribe)​

Stream

单消费模式

消费者组模式

对比

异步秒杀优化


当前业务存在的问题

JVM内存限制:当前使用的是JDK提供的阻塞队列,使用的是JVM的内存,如果不加以限制,在高并发的情况下,就会有无数的订单对象需要创建并放到阻塞队列,超出JVM内存限制,导致内存溢出,虽然我们这里给长度设置了上限,但是如果订单太多,就塞不进去了  --->内存限制

数据安全:

1.如果服务突然宕机/重启,由于JVM内存没有持久化机制,内存里的订单信息丢失,后台没有订单数据,但用户已经下单付款了  --->数据不一致。

2.某一线程从队列里取出下单任务,若此时发生事故,任务就无法执行,但此时队列里已经没有该订单任务了  --->任务丢失。

认识消息队列

消息队列是JVM以外的一个独立的服务,不受JVM内存的限制  --->解决内存限制

消息队列不仅做数据存储,还确保了数据安全:有持久化机制,能持久保存  --->解决数据不一致

消息投递给消费者后,要求消费者做消息的确认,否则,消息依然存在于队列,下次依然投递给消费者,直到被确认,即消息至少被消费一次  --->解决任务丢失

List

PubSub (publish subscribe)

Stream

单消费模式

写:

读:

消费者组模式

对比

异步秒杀优化

(主要是为了替代原来的阻塞队列)

首先,添加队列以及对应的消费者组

修改lua脚本

注释掉之前的处理任务逻辑

改造:

由于已经在redis中判断过库存是否充足,以及该用户是否买过同一个优惠券。所以只要走到createVoucherOrder方法,几乎不可能存在扣减库存失败/插入订单失败,故这里没有必要再次保证原子性,也就不需要@Transactional注解,也就不用代理对象调用该方法了,也就不需要这里的proxy了,所以有关proxy的逻辑就可以删去了。

最终经测试,功能完整,这里不再展示,业务优化成功。

相关文章:

  • MyBatis-Plus 详解:快速上手到深入理解
  • 探索大语言模型(LLM):目标、原理、挑战与解决方案
  • 如何用AI辅助数据分析及工具推荐
  • 第七章:7.4写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换。
  • 09-RocketMQ 深度解析:从原理到实战,构建可靠消息驱动微服务
  • 如何用AI辅助软件产品原型设计及工具推荐
  • 【野火模型】利用深度神经网络替代 ELMv1 野火参数化:机制、实现与性能评估
  • ArcGIS Desktop使用入门(四)——9版本与10版本区别
  • 基于Vue Node.js的电影售票网站的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 人工智能之数学基础:特征值分解与奇异值分解的区别分析
  • Android ImageButton 使用详解
  • Spark宽窄依赖与Join优化:协同划分与非协同划分的底层逻辑
  • 解码未来:大语言模型训练与推理的双螺旋进化之路
  • 安卓自定义build的apk文件名
  • 【C++动态规划 组合数学】3193. 统计逆序对的数目|2266
  • 精通MySQL:快速获取数据表字段提高开发效率
  • 二级建造师备考攻略:高效学习与题库推荐
  • WPF View 与ViewModel注入对象
  • MySQL MVCC工作流程详解
  • 《重构全球贸易体系用户指南》解读
  • 百度网做网站吗/seo中文含义
  • 建设网站时候应该注意哪些/seo网站页面优化包含
  • 装饰设计公司排名/关键词seo价格
  • 静海做网站公司/链接提交工具
  • wordpress 显示不全/北京网站seo费用
  • 做团购的家居网站有哪些/seo在线教学