Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > redis消息队列

如何使用redis的stream数据类型做消息队列

作者:Nü Wa

Redis 5.0引入Stream数据类型,支持消费者组、分片消费和持久化,替代旧版pub/sub实现更可靠的消息队列,适用于订单处理、日志收集等场景,但需注意内存管理和消息补偿机制,本文给大家介绍使用redis的stream数据类型做消息队列的相关知识,感兴趣的朋友一起看看吧

在redis5.0之前,如果想使用它作为简单的消息队列,最好的选择就是自身提供的pub/sub模式.它支持简单的发布/订阅模式,发布一个channel绑定一条消息,然后可以有多个消费者监听这个channel,每个消费者都能收到相同的消息。不支持持久化,不支持查询,不支持分组,不支持分片消费,也没有提供很好的监控手段(有简单的pubsub容器命令,可以看有哪些channel,订阅者数量等)。但是5.0之后,倘若我们人仍选择redis作为简单消息队列,就可以使用新的数据类型STREAM

STREAM数据类型介绍

数据类型基础说明

常用命令及详解

实际使用场景

可用作消息队列

可以作为事件总线

延迟队列/死信队列

实时数据流处理

重要说明

关于持久化和消息删除

读取的阻塞和非阻塞

插入的性能

Results obtained: 结果:
		Processed between 0 and 1 ms -> 74.11%
		Processed between 1 and 2 ms -> 25.80%
		Processed between 2 and 3 ms -> 0.06%
		Processed between 3 and 4 ms -> 0.01%
		Processed between 4 and 5 ms -> 0.02%
		因此,99.9%的请求的延迟<= 2毫秒,异常值仍然非常接近平均值。

消费者组

属于PEL中的消息可以删除吗

pending状态的消息是可以被删除的,redis并没有设计未确认的消息不允许删除。如果采用xdel删除消息后,pending列表将仍然保留待消费消息的ID,但是消息内容没有了。因此,在读取此类PEL条目时,Redis会返回一个空值。

一个stream的一个group多个consumer时如何消费的

1. 分区/竞争消费(Work Queue 模式)

2. pending 机制

3. 分布式环境下的存储

x. 如果要“广播”效果(每个消费者都收到同一条消息),需要每个消费者用不同的 group。或者都广播了,就使用PUB/SUB吧,,~~

观测流

更加详细stream的细节介绍,可以参考官网:https://redis.io/docs/latest/develop/data-types/streams

稍后我将具体介绍如何在代码中使用stream来作为消息队列。

到此这篇关于使用redis的stream数据类型做消息队列的文章就介绍到这了,更多相关redis消息队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文