Redis Stream是一种Redis 5.0引入的数据结构,它是Redis对消息队列的实现,受到了Apache Kafka的启发,同时保持了Redis的简单性和高效性。Redis Stream是一种数据结构,每个Stream都通过一个键进行寻址,这个键指向Stream类型的值。与其他Redis数据结构一样,可以对Stream使用基本的操作,例如使用DEL删除一个Stream,使用expire命令设置Stream的生存时间(TTL)。Stream数据同样存储在内存中,并且可以通过RDB进行持久化到硬盘。消息的顺序无法更改,表示一个消息序列,其中消息只能添加到序列的末尾。每个Stream中的消息是一组键值对,类似于Redis Hash。每个Stream都有一个唯一ID,通常由时间戳组成。Streams可以被多个消费者消费,Redis提供了两种消费模式。Redis Stream提供了两种消费方式:多消费者同时读取相同数据和消费组模式。在多消费者读取相同数据模式中,Redis允许多个consumer从Stream的任意点读取相同数据。每个Application可以针对相同的数据进行不同的业务处理。消费组模式用于解决同一条数据被服务的多个实例重复消费的问题。每个Stream可以挂多个消费组,每个消费组会有个游标last_delivered_id在Stream数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有一个Stream内唯一的名称。不同消费组的状态都是独立的,相互不受影响。同一份Stream的消息会被每个消费组都消费到。同一个消费组可以挂接多个消费者,这些消费者之间是竞争关系,任意一个消费者读取了消息都会使游标last_delivered_id往前移动。也就是说,同一个消费组的消费者之间,不会对同一个消息重复消费。发布消息到Stream使用XADD命令,将数据添加到指定的Stream。如果Stream不存在,则会新建一个Stream。从Stream订阅消息使用XREAD命令,用于从Stream中读取消息。创建消费组使用XGROUP CREATE命令,从消费组读取消息使用XREADGROUP命令。确认消息使用XACK命令,查看哪些消息已读取未被确认使用XPENDING命令,更改未确认读取的owner使用XCLAIM命令。Stream相关命令整理如下:XADD:添加命令到stream,XREAD:从Stream中读取数据,XREADGROUP:从消费组读取消息,XGROUP CREATE:创建消费组,XGROUP CREATECONSUMER:创建消费者,XGROUP DELCONSUMER:从消费组中删除消费者,XGROUP DESTROY:删除消费组,包括消费组下的消费组,未确认消息,XGROUP SETID:配置消费组的last delivered ID(最后一个读取的消息id),XAUTOCLAIM:更改为确认消息的owner,XCLAIM修改未确认消息的owner,XACK确认已读消息,XPENDING查看已读未确认的消息,XDEL删除消息,XINFO CONSUMERS:查看消费者信息,XINFO STREAM:查看stream信息,XLEN查询stream长度,XRANGE查看Stream数据,XREVRANGE:倒序查看Stream中元素,XTRIM:删除老数据,XSETID:内部命令,Redis主机使用它来复制流的最后一个交付ID。