millisecondsTime指的是Redis节点服务器的本地时间,如果存在当前的毫秒时间戳比以前已经存在的数据的时间戳小的话(本地时间钟后跳),那么系统将会采用以前相同的毫秒创建新的ID。
sequenceNumber指的是序列号,在相同的millisecondsTime毫秒下,序列号从0开始递增,序列号是64位长度,理论上在统一毫秒内生成的数据量无法到达这个级别,因此不用担心sequenceNumber会不够用。
客户端显示传入规则
Redis对于ID有强制要求,格式必须是**-**,最小ID为0-1,并且后续ID不能小于前一个ID
2.4 消息内容
Stream的消息内容,也就是图中的Message Content它的结构类似Hash结构,以key-value的形式存在。
3、Stream指令
3.1 指令汇总
Stream的指令根据可以分为两类,分别是消息队列相关指令,消费组相关指令。
消息队列相关指令:
| 指令名称 | 指令作用 |
| — | — |
| XADD | 添加消息到队列末尾 |
| XTRIM | 限制Stream的长度,如果已经超长会进行截取 |
| XDEL | 删除消息 |
| XLEN | 获取Stream中的消息长度 |
| XRANGE | 获取消息列表(可以指定范围),忽略删除的消息 |
| XREVRANGE | 和XRANGE相比区别在于反向获取,ID从大到小 |
| XREAD | 获取消息(阻塞/非阻塞),返回大于指定ID的消息 |
消费组相关指令:
| 指令名称 | 指令作用 |
| — | — |
| XGROUP CREATE | 创建消费者组 |
| XREADGROUP GROUP | 读取消费者组中的消息 |
| XACK | ack消息,消息被标记为“已处理” |
| XGROUP SETID | 设置消费者组最后递送消息的ID |
| XGROUP DELCONSUMER | 删除消费者组 |
| XPENDING | 打印待处理消息的详细信息 |
| XCLAIM | 转移消息的归属权(长期未被处理/无法处理的消息,转交给其他消费者组进行处理) |
| XINFO | 打印Stream\Consumer\Group的详细信息 |
| XINFO GROUPS | 打印消费者组的详细信息 |
| XINFO STREAM | 打印Stream的详细信息 |
3.2 XADD
XADD 用于向Stream 队列中添加消息,如果指定的Stream 队列不存在,则该命令执行时会新建一个Stream 队列。
XADD的指令语法:
XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|ID field value [field value …]
如下通过XADD展示了定义ID的两种方式,具体可以看2.3。