XADD my-stream * name John age 30 email john@example.com
复制代码
上述命令的说明:
向名为 my-stream 的 Redis stream 中添加了一条新消息。
* 表示使用自动生成的消息 ID,
name、age 和 email 是消息的字段名
John、30 和 john@example.com 是消息的字段值。
流元素 ID
XADD 命令在成功执行后会返回元素 ID 作为结果:
"1681138020163-0"
复制代码
每个元素的 ID 是一个递增的唯一标识符,由两部分组成:一个时间戳和一个序列号。
时间戳部分是一个 64 位的有符号整数,以毫秒为单位表示自 Unix 时间起经过的毫秒数。
序列号部分是一个递增的整数,从 0 开始逐步增加。
为了证明,我们可以指定消息 ID 向指定流中发送一条消息:
XADD my-stream 1681138020163-1 name Mary age 25 email mary@example.com
复制代码
返回结果:
"1681138020163-1"
复制代码
最后,可以提前使用 XRANGE 指令查看推入流中的数据
XRANGE my-stream - +
复制代码
返回结果:
1) 1) "1681138020163-0"
2) 1) "name"
2) "John"
3) "age"
4) "30"
5) "email"
6) "john@example.com"
2) 1) "1681138020163-1"
2) 1) "name"
2) "Mary"
3) "age"
4) "25"
5) "email"
6) "mary@example.com"
复制代码
流元素 ID 的限制
元素 ID 在 Redis stream 中扮演着非常重要的角色,它不仅保证了元素的唯一性和顺序性,还提供了高效的范围查询和分析功能。在使用 Redis stream 时,需要特别注意元素 ID 的限制,并保证 ID 的唯一性和递增性。
限制如下::
ID 必须是唯一的
新元素的 ID 必须比流中所有已有元素的 ID 都要大
还有一些长度和特殊字符的限制等等,不符合上述限制的添加元素操作,会被 redis 拒绝,并且返回一个错误等。 最大元素 ID 是如何更新的 ?
在成功执行XADD命令之后,流的最大元素ID也会随之更新。 为什么要限制 新元素的 ID 必须比流中所有已有元素的 ID 都要大 ?
限制新元素的 ID 必须比流中所有已有元素的 ID 都要大,是为了保证 stream 中每个元素的唯一性和顺序性。这种特性对于使用流实现消息队列和事件系统的用户来说是非常重要的:用户可以确信,新的消息和事件只会出现在已有消息和事件之后,就像现实世界里新事件总是发生在已有事件之后一样,一切都是有序进行的。
自动生成 ID 的规则