XADD
XADD key [NOMKSTREAM] [<MAXLEN | MINID> [= | ~] threshold [LIMIT count]] <* | id> field value [field value ...]
- 从以下位置开始可用:
- 5.0.0
- 时间复杂度:
- 添加新条目时为 O(1),修剪时为 O(N),其中 N 是逐出的条目数。
- ACL 类别:
-
@write
,@stream
,@fast
,
将指定的 stream entry 附加到 stream 的指定 key 处。
如果该密钥不存在,则作为运行此命令的副作用,
key 是使用 stream 值创建的。stream 的 key 的创建可以是
disabled 替换为NOMKSTREAM
选择。
条目由字段-值对列表组成。
字段-值对的存储顺序与用户指定的顺序相同。
读取流的命令(例如XRANGE
或XREAD
保证按照字段和值的添加顺序返回字段和值XADD
.
XADD
是唯一可以向流中添加数据的 Redis 命令,但
还有其他命令,例如XDEL
和XTRIM
,它们能够
从流中删除数据。
将 Stream ID 指定为参数
流条目 ID 标识流中的给定条目。
这XADD
命令将为您自动生成一个唯一的 ID,如果 ID 参数
specified 是字符(星号 ASCII 字符)。然而,虽然
仅在极少数情况下有用,则可以指定格式正确的 ID,因此
新条目将完全使用指定的 ID 添加。*
ID 由两个数字指定,用字符分隔:-
1526919030474-55
这两个量都是 64 位数字。自动生成 ID 时, 第一部分是 Redis 实例生成的 Unix 时间(以毫秒为单位) ID 的 ID 中。第二部分只是一个序列号,用于 区分同一毫秒内生成的 ID。
您还可以指定一个不完整的 ID,该 ID 仅包含毫秒部分,该部分被解释为序列部分的零值。
要仅自动生成序列部分,请指定毫秒部分,后跟分隔符和字符:-
*
> XADD mystream 1526919030474-55 message "Hello,"
"1526919030474-55"
> XADD mystream 1526919030474-* message " World!"
"1526919030474-56"
ID 保证始终是递增的:如果您比较 条目将大于任何其他过去的 ID,因此条目 完全在 Stream 中排序。为了保证此属性, 如果流中当前 top ID 的时间大于当前 local time 时,则以 top entry time 代替,而 ID 的序列部分递增。例如,当 本地时钟向后跳转,或者如果在故障转移后,新的 Master 具有 一个不同的绝对时间。
当用户将显式 ID 指定给XADD
,则最小有效 ID 为0-1
,并且用户必须指定一个大于任何其他 ID 的 ID
ID 当前在流中,否则命令将失败并返回错误。通常
只有当您有另一个系统生成
唯一 ID(例如 SQL 表),并且您确实需要 Redis 流
ID 来匹配另一个系统的 ID。
上限流
XADD
包含与XTRIM
command - 有关更多信息,请参阅其文档页面。
这允许添加新条目并通过对XADD
,有效地使用任意阈值对流进行限制。
尽管精确修剪是可能的并且是默认设置,但由于流的内部表示,添加入口并使用XADD
使用几乎精确的修剪 (参数)。~
例如,调用XADD
采用以下形式:
XADD mystream MAXLEN ~ 1000 * ... entry fields here ...
将添加新条目,但也将驱逐旧条目,以便流仅包含 1000 个条目,或者最多包含几十个条目。
有关流的其他信息
有关 Redis 流的更多信息,请查看我们的 Redis 流简介文档。
例子
RESP2 回复
以下选项之一:
- 批量字符串回复:添加的条目的 ID。如果星号 () 作为 id 参数传递,则 ID 是自动生成的 ID,否则命令只会返回用户在插入期间指定的相同 ID。
*
- Nil 回复:如果给出了 NOMKSTREAM 选项并且密钥不存在。
RESP3 回复
以下选项之一:
- 批量字符串回复:添加的条目的 ID。如果星号 () 作为 id 参数传递,则 ID 是自动生成的 ID,否则命令只会返回用户在插入期间指定的相同 ID。
*
- 空回复:如果给出了 NOMKSTREAM 选项并且密钥不存在。
历史
- 从 Redis 版本 6.2.0 开始:添加了
NOMKSTREAM
选择MINID
trimming 策略和LIMIT
选择。 - 从 Redis 版本 7.0.0 开始:添加了对
<ms>-*
显式 ID 表单。