Redis数据库-消息队列

一、消息队列介绍

在这里插入图片描述

二、基于List结构模拟消息队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

在这里插入图片描述

三、基于PubSub实现消息队列

(1)PubSub介绍

PubSub是publish与subscribe两个单词的缩写,见明知意,PubSub就是发布与订阅的意思。
在这里插入图片描述
可以到Redis官网查看通配符的书写规则
在这里插入图片描述

(2)使用演示

  1. 当输入subscribe或psubscribe后就会进入阻塞状态,等待获取消息队列中的消息
    在这里插入图片描述
  2. 使用publish发布消息后两个频道都能成功获取到消息
    在这里插入图片描述
  3. 有时仅有符合通配符的消息才会被指定频道接收到
    在这里插入图片描述

(3)总结

在这里插入图片描述

四、Stream的单消费模式

Stream是一种数据类型,用于做数据存储,所以是支持数据持久化的,对数据安全有保障。

(1)发送与读取消息

①发送消息

key指的是队列的名称,需要向哪个队列中去发送消息;

在Stream数据结构的底层会基于消息id去形成树状结构,方便将来去查询消息,若想要去自定指定id就必须要严格按照"时间戳-递增数字"的格式,假如在同一毫秒内插入多条消息,那么后面的数字就会自动递增,用于区分消息;

field-value就是实际存储到消息队列当中的消息体,一个消息id可以去存放多个消息体键值对。
在这里插入图片描述

②读取消息

在这里插入图片描述
使用示例:
在这里插入图片描述
在队列中存入一条消息后发现可以在多个频道中多次读取该条消息,若想读取还未读取过的最新消息则需要使用 $符,同样的也可以去阻塞等待最新消息
在这里插入图片描述
等到队列中存入一条新消息时,频道就可以立刻读取到
在这里插入图片描述

(2)java代码中的编写方式

在这里插入图片描述

(3)总结

在这里插入图片描述

五、Stream的消费者组模式

在这里插入图片描述

(1)命令介绍

①XGROUP类型命令

在这里插入图片描述

②XREADGROUP类型命令

在这里插入图片描述
在这里插入图片描述

③XACK及XPENDING
  1. XACK消息确认
    在这里插入图片描述
  2. XPENDING读取pending-list中消息
    在这里插入图片描述
    空闲时间指的是在获取到消息后直至确认消息前的时间间隔,假设我们赋予一个值为5000,也就代表会取出空闲时间超过5000ms以上的消息。
    假设现在再去读取一条消息v6,但是并没有对其进行确认,那么该条消息就会被存储到该消费者的pending-list中,此时使用 XPENDING命令就可以查询到未被确认的该条消息v6,此处id范围的 “- +” 代表所有消息。
    在这里插入图片描述
    也可以通过XREADGROUP命令来读取pending-list中的第一条消息
    在这里插入图片描述

(2)java中的实现方式

在这里插入图片描述

(3)总结

在这里插入图片描述
三种消息队列的比较:
在这里插入图片描述

Stream消息队列的缺点:
虽然Stream支持消息持久化,但是这是依赖于Redis本身持久化的,这往往并不能保证万无一失,是有丢失风险的;而且目前这种消息确认机制只支持消费者确认机制,并不支持生产者确认机制,如果是生产者在发消息的过程中发生丢失,那就无法保证消息的安全性了。
若公司业务较为庞大,对于消息队列的要求更加严格,那么更建议去使用专业的MQ消息队列。

六、基于Stream消息队列实现异步秒杀

在这里插入图片描述

①创建消息队列

在这里插入图片描述
队列只需要在初始化时创建一次即可长久使用,所以不需要java代码来完成

②编写Lua脚本

在这里插入图片描述
在这里插入图片描述

③java业务逻辑改造
  1. 判断秒杀资格逻辑改造
    在这里插入图片描述
  2. 改造线程任务执行流程
    不再需要以前注入的阻塞队列
    在这里插入图片描述
    修改run方法
    在这里插入图片描述
    在这里插入图片描述
    定义handlePendingList方法用于处理pending-list中的未被确认的消息
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

归一化函数 & 激活函数

目录 Softmax函数 定义 输入输出 例子 总结 Layernorm 定义 输入输出 Sigmoid函数 定义 Tanh函数 定义 Relu函数 定义 Elu函数 定义 Gelu函数 定义 总结 Softmax函数 定义 softmax函数又称归一化指数函数,其作用是将一个 n 维的实值向量转换为…

使用 C# 入门深度学习:线性代数详细讲解

在深度学习的领域中,线性代数是基础数学工具之一。无论是神经网络的训练过程,还是数据的预处理和特征提取,线性代数的知识都无处不在。掌握线性代数的核心概念,对于理解和实现深度学习算法至关重要。在本篇文章中,我们…

【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解:搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…

CICD遇到npm error code EINTEGRITY的问题

场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…

Android13 wifi设置国家码详解

Android13 wifi设置国家码详解 文章目录 Android13 wifi设置国家码详解一、前言二、设置wifi国家码相关代码1、adb或者串口也能设置和获取当前国家码(1)查询命令的方式(2)获取和设置国家码的示例 2、Java代码设置国家码3、获取当前…

c/c++的opencv高斯模糊

深入探索图像高斯模糊:原理、C/C实现与OpenCV应用 在图像处理的众多技术中,模糊(或平滑)是最为基础且不可或缺的一环。它广泛应用于降噪、图像预处理、特征提取前的平滑以及计算机图形学中的各种视觉效果。在高斯模糊&#xff08…

Java求职者面试:从Spring Boot到微服务的技术点解析

Java求职者面试:从Spring Boot到微服务的技术点解析 场景:互联网医疗-预约挂号系统 面试官: “小明,我们今天的场景是一个互联网医疗的预约挂号系统。我们需要支持高并发的用户预约操作,同时保证数据一致性和系统的高…

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能,是任何品牌内容营销策略的重要组成部分。 但是,为了发展您的 YouTube 频道并消除噪音,优化您的视频内容以便可以在搜索结…

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类,以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明: /*** Java Collection Framework 说明:** 在 Java 中,集合(Collec…

如何用ipmitool修改FRU信息?

如何用ipmitool修改FRU信息? FRU(Field Replaceable Unit,现场可更换单元)记录了服务器硬件的关键信息,如序列号、制造商、型号等。通过ipmitool修改FRU信息,常用于硬件维护、资产标签更新或调试场景。以下…

uniapp vue 开发微信小程序 分包梳理经验总结

嗨,我是小路。今天主要和大家分享的主题是“uniapp vue 开发微信小程序 分包梳理经验总结”。 在使用 UniAppvue框架开发微信小程序时,当项目比较大的时候,经常需要分包加载。它有助于控制主包的大小,从而提升小程序的启…

git合并多次commit提交

首先查看历史记录 git log 查看你想要合并的commit是哪些(注意:这里是逆序,最上的是最新提交) 找到当前想要合并的最后一个记录,复制该记录的下一个记录的 id(黄色部分commit id)&#xff0c…

系统架构设计(七):数据流图

定义 数据流图(Data Flow Diagram, DFD)是一种用于表示信息系统数据流转及处理过程的图形工具。 它反映系统功能及数据之间的关系,是结构化分析与设计的重要工具。 主要符号 符号说明描述举例方框外部实体(源或终点&#xff09…

MAUI与XAML交互:构建跨平台应用的关键技巧

文章目录 引言1. 代码隐藏文件关联1.1 XAML文件与代码隐藏文件的关系1.2 部分类机制1.3 InitializeComponent方法1.4 XAML命名空间映射 2. 元素名称与x:Name属性2.1 x:Name属性的作用2.2 命名规则与最佳实践2.3 x:Name与x:Reference的区别2.4 编译过程中的名称处理 3. 在代码中…

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件,但是它不止可以用来读取文件,还可以和RCE,XXE,反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议,它是一种过滤器,可以作为一个中…

微信小程序开发中,请求数据列表,第一次请求10条,滑动到最低自动再请求10条,后面请求的10条怎么加到第一次请求的10条后面?

在微信小程序中实现分页加载数据列表,可通过以下步骤将后续请求的10条数据追加到首次加载的数据之后: 实现步骤及代码示例 定义页面数据与参数 在页面的 data 中初始化存储列表、页码、加载状态及是否有更多数据的标识: Page({data: {list…

如何利用 Java 爬虫根据 ID 获取某手商品详情:实战指南

在电商领域,获取商品详情数据对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。某手作为国内知名的电商平台,提供了丰富的商品资源。通过 Java 爬虫技术,我们可以高效地根据商品 ID 获取某手商品的详细信息。本文将详细介…

电平匹配电路

1、为什么要电平匹配? 现在很多SOC器件为了降低功耗,都把IO口的电平设计成了1.8V,核电压0.85V,当这种SOC做主平台时,在做接口设计需要格外关注电平的匹配。单板中经常需要将1.8V的电平转换成3.3V或者转成5V。如果没有注意到输入和输出信号之间的电平匹配,系统就无法正常…

【技术揭秘】Profinet转RS485如何优化冲剪机的实时通信性能?​​

在现代工业自动化领域,通信协议是连接不同设备和系统的关键。RS485和Profinet是两种广泛使用的工业通信标准,它们各自拥有独特的特性和应用场景。本文将探讨如何通过一个小疆智控Profinet转RS485网关来优化冲剪机的应用,提高生产线的效率和可…

面经总目录——持续更新中

说明 本面经总结了校招时我面试各个公司的面试题目,每场面试后我都及时进行了总结,同时后期补充扩展了同类型的相近面试题,校招时从两个方向进行投递,视觉算法工程师和软件开发工程师(C方向),所…