Redis Streams 学习资料整理

前言

Redis Stream 是 Redis 5.0 版本新增加的数据结构。

Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

常用命令

XADD - 添加消息到末尾
// 示例
> XADD mystream * sensor-id 1234 temperature 19.8
1518951480106-0

上面的例子中,调用了XADD命令往名为mystream的Stream中添加了一个条目sensor-id: 123, temperature: 19.8,使用了自动生成的条目ID,也就是命令返回的值,具体在这里是1518951480106-0。

命令的第一个参数是key的名称mystream,第二个参数是用于唯一确认Stream中每个条目的条目ID。然而,在这个例子中,我们传入的参数值是*,因为我们希望由Redis服务器为我们自动生成一个新的ID。每一个新的ID都会单调增长,简单来讲就是,每次新添加的条目都会拥有一个比其它所有条目更大的ID。

XLEN - 获取流包含的元素数量,即消息长度
// 示例
127.0.0.1:6379> XLEN  AHCLOUD_SECURITY_CENTER_ASSET
(integer) 1

这里,AHCLOUD_SECURITY_CENTER_ASSET 是 Stream 的 key 的名称,(integer) 1表示这个 Stream 的条目数量为1。

XREAD - 以阻塞或非阻塞方式获取消息列表
> XREAD COUNT 2 STREAMS mystream 0
1) 1) "mystream"
   2) 1) 1) 1519073278252-0
         2) 1) "foo"
            2) "value_1"
      2) 1) 1519073279157-0
         2) 1) "foo"
            2) "value_2"

以上是XREAD的非阻塞形式。注意COUNT选项并不是必需的,实际上这个命令唯一强制的选项是STREAMS,指定了一组key以及调用者已经看到的每个Stream相应的最大ID,以便该命令仅向客户端提供ID大于我们指定ID的消息。

在上面的命令中,我们写了STREAMS mystream 0,所以我们想要流 mystream中所有ID大于0-0的消息。正如你在上面的例子中所看到的,命令返回了键名,因为实际上可以通过传入多个key来同时从不同的Stream中读取数据。我可以写一下,例如:STREAMS mystream otherstream 0 0。注意在STREAMS选项后面,我们需要提供键名称,以及之后的ID。因此,STREAMS选项必须始终是最后一个。

学习资料

Redis Streams 介绍

Redis Stream | 菜鸟教程

posted @ 2022-01-19 17:30  爱吃西瓜的番茄酱  阅读(134)  评论(0编辑  收藏  举报