XRANGE 系列

语法
XRANGE key start end [COUNT count]
从以下位置开始可用:
5.0.0
时间复杂度:
O(N),其中 N 是返回的元素数。如果 N 是常数(例如,总是用 COUNT 请求前 10 个元素),你可以认为它是 O(1)。
ACL 类别:
@read, @stream, @slow,

该命令返回与给定 ID 范围匹配的流条目。 该范围由最小和最大 ID 指定。所有具有 两个指定 ID 之间的 ID 或指定的两个 ID 中的一个 ID (closed interval) 返回。

XRANGE命令有许多应用程序:

  • 返回特定时间范围内的项目。这是可能的,因为 流 ID 与时间相关
  • 以增量方式迭代流,仅返回 每次迭代都有几个项目。然而,它在语义上要多得多 比SCAN函数系列。
  • 从流中获取单个条目,并提供该条目的 ID 要提取两次:作为查询间隔的开始和结束。

该命令还有一个互惠命令,返回 反向顺序,称为XREVRANGE,否则完全相同。

-和特殊 ID+

和 special ID 分别表示可能的最小 ID 以及流中可能的最大 ID,因此以下命令 将只返回 Stream 中的每个条目:-+

> XRANGE somestream - +
1) 1) 1526985054069-0
   2) 1) "duration"
      2) "72"
      3) "event-id"
      4) "9"
      5) "user-id"
      6) "839248"
2) 1) 1526985069902-0
   2) 1) "duration"
      2) "415"
      3) "event-id"
      4) "2"
      5) "user-id"
      6) "772213"
... other entries here ...

和 special ID 分别表示最小和最大范围 ID, 但是,它们更易于键入。-+

不完整的 ID

流 ID 由两部分组成:Unix 毫秒时间戳和 在同一毫秒中插入的条目的序列号。这是可能的 使用XRANGE仅指定 ID 的第一部分,即毫秒时间, 如以下示例所示:

> XRANGE somestream 1526985054069 1526985055069

在这种情况下,XRANGE将自动完成 Start interval-0和 end interval 为-18446744073709551615,为了返回所有 在给定毫秒到 另一个指定的毫秒。这也意味着重复相同的 millisecond 两次,我们得到该毫秒内的所有条目, 因为序列号范围将从零到最大值。

以这种方式使用XRANGE用作 Range 查询命令以获取条目 在指定时间内。这对于访问历史记录非常方便 流中过去的事件。

独家系列

默认情况下,范围是 close (包括) ,这意味着回复可以包括 ID 与查询的开始和结束间隔匹配的条目。这是可能的 指定打开间隔(不包括),方法是在 ID 前面加上 字符。这对于迭代流非常有用,如下所述。(

返回最大条目数

使用 COUNT 选项可以减少条目数 报道。这是一个非常重要的特征,即使它可能看起来微不足道, 因为它允许对 Give Me 等作进行建模 条目大于或等于以下内容

> XRANGE somestream 1526985054069-0 + COUNT 1
1) 1) 1526985054069-0
   2) 1) "duration"
      2) "72"
      3) "event-id"
      4) "9"
      5) "user-id"
      6) "839248"

在上述情况下,条目1526985054069-0存在,否则服务器 会给我们发送下一个。用COUNT也是 base 为了 用XRANGE作为迭代器。

迭代流

为了迭代流,我们可以按如下方式进行。我们假设 我们希望每次迭代有两个元素。我们开始获取前两个 元素,这很简单:

> XRANGE writers - + COUNT 2
1) 1) 1526985676425-0
   2) 1) "name"
      2) "Virginia"
      3) "surname"
      4) "Woolf"
2) 1) 1526985685298-0
   2) 1) "name"
      2) "Jane"
      3) "surname"
      4) "Austen"

然后,而不是从 中再次开始迭代,作为 start 的 ID 中,我们使用 以前-XRANGEcall 作为独占间隔。

最后一个条目的 ID 为1526985685298-0,所以我们只给它加上前缀 替换为 '(',并继续我们的迭代:

> XRANGE writers (1526985685298-0 + COUNT 2
1) 1) 1526985691746-0
   2) 1) "name"
      2) "Toni"
      3) "surname"
      4) "Morrison"
2) 1) 1526985712947-0
   2) 1) "name"
      2) "Agatha"
      3) "surname"
      4) "Christie"

等等。最终,这将允许访问 流。显然,我们可以从任何 ID 开始迭代,甚至可以从 特定时间,方法是提供给定的不完整启动 ID。此外,我们 可以通过提供 end 将迭代限制为给定的 ID 或时间 ID 或不完整的 ID 而不是 .+

命令XREAD也能够迭代流。 命令XREVRANGE可以从更高的 ID 迭代流反向 (或时间)来降低 ID(或时间)。

使用早期版本的 Redis 进行迭代

虽然独占范围间隔仅在 Redis 6.2 中可用,但它仍然可用 可以将类似的 Stream Iteration 模式与早期版本一起使用。你 按照上述相同的方式开始从 Stream 中获取 第一个条目。

对于后续调用,您需要以编程方式将最后一个 返回 entry 的 ID。大多数 Redis 客户端应该抽象出这个细节,但是 如果需要,也可以在应用程序中实现。在上面的示例中, 这意味着递增1526985685298-0乘以 1,从 0 到 1。 因此,第二个调用将是:

> XRANGE writers 1526985685298-1 + COUNT 2
1) 1) 1526985691746-0
   2) 1) "name"
      2) "Toni"
...

另请注意,一旦最后一个 ID 的序列部分等于 18446744073709551615,您需要增加时间戳并重置 sequence part 设置为 0。例如,递增 ID1526985685298-18446744073709551615应导致1526985685299-0.

对称模式适用于迭代流XREVRANGE.这 唯一的区别是客户端需要为后续的 调用。当递减序列部分为 0 的 ID 时,时间戳需要 以递减 1 并将序列设置为 18446744073709551615。

获取单个项目

如果您寻找XGET命令你会失望的,因为XRANGE实际上是从 流。您所要做的就是在参数中指定 ID 两次 XRANGE 的:

> XRANGE mystream 1526984818136-0 1526984818136-0
1) 1) 1526984818136-0
   2) 1) "duration"
      2) "1532"
      3) "event-id"
      4) "5"
      5) "user-id"
      6) "7782813"

有关流的其他信息

有关 Redis 流的更多信息,请查看我们的 Redis 流简介文档

例子

XADD 作家 * 姓名 弗吉尼亚 姓氏 伍尔夫 XADD 作家 * 姓名 Jane 姓氏 Austen XADD 作家 * 姓名 Toni 姓 Morrison XADD 作家 * 姓名 Agatha 姓 Christie XADD 作家 * 姓名 Ngozi 姓氏 Adichie XLEN 作家 XRANGE 写入器 - + 计数 2

RESP2/RESP3 回复

Array reply:ID 匹配指定范围的 stream 条目列表。

历史

  • 从 Redis 版本 6.2.0 开始:添加了独占范围。
为本页评分
返回顶部 ↑