为何不转用 Redis Stream 替代 List 构建消息队列?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3334个文字,预计阅读时间需要14分钟。
使用Redis的List实现消息队列存在诸多局限性,例如:缺乏有效的ACK机制;无ConsumerGroup消费组概念;存在消息堆积问题。List是线性结构,若要查询特定数据,需遍历整个列表。
上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如:
- 没有良好的 ACK 机制;
- 没有 ConsumerGroup 消费组概念;
- 消息堆积。
- List 是线性结构,想要查询指定数据需要遍历整个列表;
Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据 ID 的大小进行有序排列。
它实现了大部分消息队列的功能:
- 消息 ID 系列化生成;
- 消息遍历;
- 消息的阻塞和非阻塞读;
- Consumer Groups 消费组;
- ACK 确认机制。
- 支持多播。
提供了很多消息队列操作命令,并且借鉴 Kafka 的 Consumer Groups 的概念,提供了消费组功能。
同时提供了消息的持久化和主从复制机制,客户端可以访问任何时刻的数据,并且能记住每一个客户端的访问位置,从而保证消息不丢失。
本文共计3334个文字,预计阅读时间需要14分钟。
使用Redis的List实现消息队列存在诸多局限性,例如:缺乏有效的ACK机制;无ConsumerGroup消费组概念;存在消息堆积问题。List是线性结构,若要查询特定数据,需遍历整个列表。
上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如:
- 没有良好的 ACK 机制;
- 没有 ConsumerGroup 消费组概念;
- 消息堆积。
- List 是线性结构,想要查询指定数据需要遍历整个列表;
Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据 ID 的大小进行有序排列。
它实现了大部分消息队列的功能:
- 消息 ID 系列化生成;
- 消息遍历;
- 消息的阻塞和非阻塞读;
- Consumer Groups 消费组;
- ACK 确认机制。
- 支持多播。
提供了很多消息队列操作命令,并且借鉴 Kafka 的 Consumer Groups 的概念,提供了消费组功能。
同时提供了消息的持久化和主从复制机制,客户端可以访问任何时刻的数据,并且能记住每一个客户端的访问位置,从而保证消息不丢失。

