XADD

语法
XADD key [NOMKSTREAM] [<MAXLEN | MINID> [= | ~] threshold
  [LIMIT count]] <* | id> field value [field value ...]
可用版本
Redis Open Source 5.0.0
时间复杂度
添加新条目时为 O(1),修剪时为 O(N),其中 N 是被逐出的条目数量。
ACL 类别
@write, @stream, @fast,

将指定的流条目追加到指定键的流中。如果该键不存在,则在执行此命令时会自动创建一个带有流值的新键。可以使用 NOMKSTREAM 选项禁用流键的创建。

一个条目由一系列字段-值对组成。字段-值对按照用户提供的顺序存储。读取流的命令,例如 XRANGEXREAD,保证以与通过 XADD 添加时完全相同的顺序返回字段和值。

XADD 是**唯一**可以将数据添加到流中的 Redis 命令,但还有其他命令,例如 XDELXTRIM,能够从流中删除数据。

指定流 ID 作为参数

流条目 ID 标识流中的给定条目。

如果指定的 ID 参数是 * 字符(星号 ASCII 字符),则 XADD 命令将自动为您生成一个唯一的 ID。然而,尽管只在极少数情况下有用,但可以指定一个格式良好的 ID,以便新条目恰好以指定的 ID 添加。

ID 由用 - 字符分隔的两个数字指定

1526919030474-55

两个数量都是 64 位数字。当 ID 自动生成时,第一部分是生成 ID 的 Redis 实例的 Unix 时间(毫秒)。第二部分只是一个序列号,用于区分在同一毫秒内生成的 ID。

您也可以指定一个不完整的 ID,它只包含毫秒部分,序列部分将被解释为零值。要仅自动生成序列部分,请指定毫秒部分后跟 - 分隔符和 * 字符

> XADD mystream 1526919030474-55 message "Hello,"
"1526919030474-55"
> XADD mystream 1526919030474-* message " World!"
"1526919030474-56"

ID 保证总是递增的:如果您比较刚插入的条目的 ID,它将大于任何其他过去的 ID,因此条目在流内完全有序。为了保证此属性,如果流中当前最高 ID 的时间大于实例的当前本地时间,则将使用最高条目时间并增加 ID 的序列部分。这可能发生在例如本地时钟回跳时,或者在故障转移后新的主节点具有不同的绝对时间时。

当用户为 XADD 指定显式 ID 时,最小有效 ID 为 0-1,用户**必须**指定一个大于流中当前任何其他 ID 的 ID,否则命令将失败并返回错误。通常,仅当您有另一个系统生成唯一 ID(例如 SQL 表)并且您确实希望 Redis 流 ID 与该其他系统的 ID 匹配时,使用特定 ID 才有用。

有上限的流

XADD 包含与 XTRIM 命令相同的语义 - 有关更多信息,请参阅其文档页面。这允许在一次 XADD 调用中添加新条目并控制流的大小,从而有效地为流设置任意阈值上限。尽管精确修剪是可能且是默认设置,但由于流的内部表示方式,使用**几乎精确**修剪(~ 参数)通过 XADD 添加条目并修剪流的效率更高。

例如,以下形式调用 XADD

XADD mystream MAXLEN ~ 1000 * ... entry fields here ...

Will add a new entry but will also evict old entries so that the stream will contain only 1000 entries, or at most a few tens more.

有关流的更多信息

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

示例

XADD mystream * name Sara surname OConnor XADD mystream * field1 value1 field2 value2 field3 value3 XLEN mystream XRANGE mystream - +

RESP2 回复

以下之一

  • 批量字符串回复:添加的条目的 ID。如果将星号(*)作为 id 参数传递,则 ID 是自动生成的 ID,否则命令只返回用户在插入时指定的 ID。
  • 空回复:如果给出了 NOMKSTREAM 选项且键不存在。

RESP3 回复

以下之一

  • 批量字符串回复:添加的条目的 ID。如果将星号(*)作为 id 参数传递,则 ID 是自动生成的 ID,否则命令只返回用户在插入时指定的 ID。
  • 空值回复:如果给出了 NOMKSTREAM 选项且键不存在。

历史

  • 从 Redis 6.2.0 版本开始:添加了 NOMKSTREAM 选项、MINID 修剪策略和 LIMIT 选项。
  • 从 Redis 7.0.0 版本开始:添加了对 <ms>-* 显式 ID 形式的支持。
评价本页
返回顶部 ↑