Redis(消息队列Stream)

news2024/11/16 11:32:52

Stream是一个轻量级的消息队列。

Redis中Stream的作用是提供一种高效的消息传递机制,允许多个消费者并行地消费消息,并且不会重复消费已经处理过的消息。它可以用于实现分布式任务队列、日志收集、实时数据处理等场景。Redis中的Stream支持多个消费者组,每个消费者组可以独立消费消息,并且可以设置消费者组的消费位置,从而支持消息的多次消费和重放。同时,Redis的Stream还提供了一些高级特性,如持久化、自动截断、消息过期等,使得它更加适合在生产环境中使用。

Stream相关的命令都以X开头。

使用XADD添加返回的是消息ID,通过XLEN查看消息的数量。

通过使用XRANGE查询消息队列中的所有消息,包括消息ID,- +代表所有。

当然消息队列也是可以删除的,使用XDEL加消息ID就可以实现删除,这里就不做演示了。

删除消息也可以通过XTRIM来实现

XTRIM xbcl MAXLEN 0

上述代码代表删除所有消息

 

 在添加时可以自己指定消息ID,要保证这个ID是递增的,如果输入* Redis会保证消息ID是递增的 。

指定的ID第一个整数表示一个时间戳,第二个整数表示一个序列号。

可以使用XREAD来获取消息,COUNT后面的2代表获取的消息数量,BLOCK 1000代表如果没有消息就阻塞1000毫秒(返回nil),geekhour 0代表从头开始获取(下标从0开始)。

如果希望获取从现在开始以后的最新消息就可以把最后的0改成$。

创建一个叫做group1的消费者组:

XGROUP GREATE geekhour group1 0

 

使用XINFO查询消费者组,XGROUP添加消费者。 

 

在连续添加了3个消费者后,查询消息发现group1组中有3个消费者 

使用XREADGROUP来读取消息,消息名字geekhour后的>表示从这个消息中读取最新消息

在Redis的XREADGROUP命令中,消息名称是由消费者组名和消息ID组成的。消息ID是一个由Redis自动生成的唯一标识符,它的格式为时间戳+序列号,例如"1631714987556-0"。在XREADGROUP命令中,消息名称的最后一个参数是">"符号,表示从当前时间开始获取最新的消息。如果想要获取指定消息ID之后的消息,可以将">"符号替换为指定的消息ID。例如,如果想要从消息ID为"1631714987556-0"之后获取消息,可以将消息名称的最后一个参数设置为"1631714987556-0"。

COUNT 2表示一次读取两条消息

输出就表明我们刚刚发布的消息被消费了。

为什么能解决订阅消息的问题:

Stream在Redis中是一种新的数据结构,用于解决发布/订阅模式中存在的一些问题。发布/订阅模式通常使用PUB/SUB命令来实现,但它存在一些限制和缺点,比如无法保证消息的持久性、消息的顺序性和消费者的灵活性等。

Stream通过引入消息ID、消费者组和消费者偏移量等概念,解决了这些问题。具体来说,Stream解决了以下几个问题:

1. 持久性:Stream中的消息会被持久化保存在内存中,即使没有订阅者,消息也不会丢失。这样就可以保证消息的持久性。

2. 顺序性:Stream中的消息是有序的,每个消息都有一个唯一的消息ID。消费者可以按照消息ID的顺序来消费消息,确保消息的顺序性。

3. 消费者灵活性:Stream引入了消费者组的概念,允许多个消费者共同消费一个消息流,而且每个消费者可以有自己的消费偏移量。这样就可以实现消费者的灵活性,比如可以动态地添加或移除消费者,而不会影响其他消费者。

4. 消息确认和重试:Stream中的消费者可以使用XACK命令来确认已经处理过的消息,同时可以使用XCLAIM命令来重新获取未确认的消息,从而实现消息的确认和重试。

总之,Stream通过引入消息ID、消费者组和消费者偏移量等概念,解决了发布/订阅模式中存在的一些问题,使得消息的处理更加灵活和可靠。

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

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

相关文章

【LeetCode刷题-滑动窗口】--992.K个不同整数的子数组

992.K个不同整数的子数组 思路: class Solution {public int subarraysWithKDistinct(int[] nums, int k) {return atMostKDistinct(nums,k) - atMostKDistinct(nums,k-1);}//最多包含K个不同整数的子区间个数private int atMostKDistinct(int[] a,int k){int len …

PS学习笔记——新建文档/修改文档

文章目录 新建文档文档属性像素/分辨率颜色模式背景内容高级选项存储预设 修改文档 新建文档 方法一:ctrlN快捷键可直接打开新建文档界面 方法二:点击菜单栏中 文件->新建,即可打开新建文档界面 文档参数可按需调节(标题可以提前设定或者…

反激变压器计算方法_笔记

反激变压器计算方法_笔记 匝数比原边电感选定磁芯线圈匝数线径 原视频链接 匝数比 5V 是想要得到的输出电压 0.7V为二极管导通的压降 185Vx根号2是有效值 最大占空比取0.4。得出最小匝数为30。 更改某些值可能得出来的匝数比就不一定是30了, 这其实也是反激变压器…

mac苹果电脑需要安装杀毒软件吗?

随着数字时代的发展,计算机安全问题变得越来越重要。而在计算机安全领域中,杀毒软件是一个被广泛讨论的话题。苹果电脑需要安装杀毒软件吗?对于苹果电脑用户来说,他们常常会疑惑自己是否需要安装杀毒软件来保护自己的电脑。本文将…

力扣每日一题-数位和相等数对的最大和-2023.11.18

力扣每日一题:数位和相等数对的最大和 开篇 这道每日一题还是挺需要思考的,我绕晕了好久,根据题解的提示才写出来。 题目链接:2342.数位和相等数对的最大和 题目描述 代码思路 1.创建一个数组存储每个数位的数的最大值,创建一…

kubernetes学习笔记-概念

参考:https://kubernetes.io/zh-cn/docs/concepts/overview/ 概述 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、…

【Linux】C文件系统详解(二)——什么是fd文件描述符以及理解“一切皆文件“

文章目录 fd-文件描述符如何深度理解"一切皆文件"**我们使用OS的本质:**FILEFILE是什么?谁提供的?和我们刚刚讲的内核的struct有关系吗FILE是一个结构体.该结构体内部一定要有以下字段:FILE是C语言标准库提供的.FILE和我们刚刚讲的内核的struct没有关系,最多就是上…

医院绩效考核系统源码 医院绩效考核系统方案

医院绩效考核系统源码 医院绩效考核系统是现代医院管理的重要方法和科学的管理工具。良好的绩效管理,有助于带动全院职工的工作积极性,有助于提高工作效率、提高医疗质量、改善服务水平、降低运营成本,全面提升医院的精细化管理水平。 医院绩…

不允许你还没有了解哈希表、哈希桶、哈希冲突的解决,如何避免冲突

✏️✏️✏️今天给各位带来的是哈希桶、哈希冲突方面的知识。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点…

springMVC学习笔记-请求映射,参数绑定,响应,restful,响应状态码,springMVC拦截器

目录 概述 springMVC做了什么 springMVC与struts2区别 springMVC整个流程是一个单向闭环 springMVC具体的处理流程 springMVC的组成部分 请求映射 RequestMapping 用法 属性 1.value 2.method GET方式和POST方式 概述 HTTP给GET和POST做了哪些规定 GET方式&…

IDEO也不行了吗?设计正在变革#实时设计

2023 年 8 月,在与宜家品牌合作近 10 年之后,SPACE10 关门了。 最近,IDEO,设计思维的早期倡导者和践行者,宣布裁员1/3。 介绍下这两家设计公司: SPACE10 由宜家全额资助,于 2015 年落户哥本哈根…

生成式AI模型量化简明教程

在不断发展的人工智能领域,生成式AI无疑已成为创新的基石。 这些先进的模型,无论是用于创作艺术、生成文本还是增强医学成像,都以产生非常逼真和创造性的输出而闻名。 然而,生成式AI的力量是有代价的—模型大小和计算要求。 随着生…

DevSeo Studio设置中文界面

安装好DevSeo Studio后默认打开是欢迎页。 左下角Configure点击展开,选择plugins 弹出页面选择“installed”,然后输入chinese,默认是关闭的,点击enable将它启用,然后点击OK。 弹出页面点击“restart”重启即可。

Draco Win10编译

1. 工具 CMake 3.2.8,Visual Studio 2019 2. 步骤 2.1 拷贝代码 git clone https://github.com/google/draco.gitgit clone https://github.com/google/draco.git 下载第三方依赖 git submodule sync git submodule update --init --recursive 2.2 CMake编译…

一个UE无法注册的问题

问题场景是环境中只有一个小区,UE在找到这个小区,收到MIB SIB1后一直不发起注册。我想这大概是和S准则不满足有关系了,这个问题基本是又没啥好看的了,太简单了,在SIB1周围找找就解决了,于是我发现了以下log…

Find My充电宝|苹果Find My技术与充电宝结合,智能防丢,全球定位

充电宝是一种个人可随身携带,自身能储备电能,主要为手持式移动设备等消费电子产品(例如无线电话、笔记本电脑)充电的便携充电器,特别应用在没有外部电源供应的场合。其主要组成部分包括:用作电能存储的电池…

从算法到应用:直播美颜滤镜SDK的全面解读与评测

直播美颜滤镜SDK技术逐渐成为直播平台不可或缺的一环。本文将对直播美颜滤镜SDK进行全面解读,深入探讨其算法原理和应用效果,并通过评测分析展现其在直播领域的实际价值。 一、算法原理解读 直播美颜滤镜的背后是复杂而精密的算法,旨在提升…

【docker】iptables实现NAT

iptables是一个Linux内核中的防火墙工具,可以被用来执行各种网络相关的任务,如过滤、NAT和端口转发等,可以监控、过滤和重定向网络流量。 iptables可以用于以下应用场景: 网络安全:iptables可以过滤网络流量&#xf…

吉林省土木建筑学会建筑电气分会及吉林省建筑电气情报网学术交流年会-安科瑞 蒋静

11月9-10日,吉林省土木建筑学会建筑电气分会及吉林省建筑电气情报网学术交流年会在吉林长春隆重举办。安科瑞电气股份有限公司作为智慧用电产品供应商受邀参会,为参会人士展示了安科瑞能源物联网云平台、电力运维云平台、智慧消防云平台、预付费管理云平…

22款奔驰S450L升级流星雨大灯 感受最高配的数字大灯

“流星雨”数字大灯,极具辨识度,通过260万像素的数字微镜技术,实现“流星雨”仪式感与高度精确的光束分布;在远光灯模式下,光束精准度更达之前84颗LED照明的100倍,更新增坡道照明功能,可根据导航…