Stream数据结构

2 分钟阅读 223 字 + 158 词
Stream实现原理
使用Lists实现消息队列有很多局限性。
  1. 没有ACK机制
  2. 没有类似Kafka的消费者组的概念
  3. 消息堆积
  4. Lists是线性结构, 查询指定数据需要遍历整个列表
Stream是Redis5.0专门为消息队列设计的数据类型,提供消费者组的概念,同时提供消息的持久化和主从复制机制。
主要特性:
  1. 使用Radix Tree(压缩前缀树)和listpack结构来存储消息。
  2. 序列化生成消息ID
  3. 将多个消费者划分到不同的消费者组中。
  4. 支持多播、阻塞和非阻塞读取。
  5. ACK确认机制,保证了消息至少被消费一次。
  6. 可配置消息保存上限阈值,将历史消息丢弃,防止内存占用过大。
但是Redis Stream是一种超轻量级的MQ,并没有完全实现消息队列的所有设计要点。