Redis Stream
Redis Stream 是 Redis 5.0 版本新引入的一种数据结构,主要用于实现消息队列(MQ,Message Queue)。与 Redis 的发布订阅 (pub/sub) 模式相比,Redis Stream 提供了消息的持久化和主备复制功能,这使得任何客户端能够在任何时刻访问数据,并且能记住每一个客户端的访问位置,保证消息不丢失【0†source】。
Redis Stream 的结构包括一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容。每个 Stream 都有唯一的名称,即 Redis 的 key,在首次使用 xadd 指令追加消息时自动创建【0†source】。
Redis Stream 适用于实时数据处理、事件驱动架构、消息传递等场景。它是一个有序的、持久化的、可扩展的日志数据结构。每个 Stream 都由一个唯一的键标识,可以包含多个消息条目,每个消息条目都有一个唯一的 ID,并且按照添加的顺序进行排序【1†source】。
在 Redis Stream 中,消息 ID 有序集合是基于基数树实现的,这使得 Redis Stream 能够高效地定位元素在有序集合中的位置,以及在有序集合中查找一段范围内的元素。同时,消息哈希表是基于 listpack 实现的,这是一种紧凑的、可扩展的、有序的、二进制数据结构,用于存储多个元素【2†source】。
Redis Stream 提供了对于消费者和消费者组的阻塞、非阻塞的获取消息的功能,以及消息多播的功能,即同一个消息可被分发给多个单消费者和消费者组。它还提供了消息持久化的功能,可以让任何消费者访问任何时刻的历史消息【3†source】。
总体来说,Redis Stream 是一个功能强大的数据结构,适用于需要高效、可靠消息队列的场景。