框架——缓存框架——redis——数据类型——stream group

1、理论

1.1  概念

  引用原著:

  with different groups for the same stream, explicit acknowledgment of processed items, ability to inspect the pending items, claiming of unprocessed messages, and coherent history visibility for each single client, that is only able to see its private past history of messages.

  它相当于key为consumer(消费者), value为stream列表。Group用于管理。

  获取consumer当前正在处理的item,处于等待状态的item, 未被处理的item,可以查看每个consumer获取item的历史信息。

  每个客户端相当于一个consumer。

1.2  结构

  

  第一部分,组的名称。

  第二部分,stream的key值。

  第三部分,最后处理的ID。

  第四部分,客户端列表,每个客户端处于pending状态的ID。

1.3   流程

第一步,客户端,或者称为consumer,调用XREADGROUP命令查询。

第二步,服务端返回结果,更新。

引用原著:

  If the message was never delivered to anyone, that is, if we are talking about a new message, then a PEL (Pending Entries List) is created.

发送失败,即服务端未收到客户端收到消息的确认信息,更新PEL。

  If instead the message was already delivered to this consumer, and it is just re-fetching the same message again, then the last delivery counter is updated to the current time, and the number of deliveries is incremented by one. You can access those message properties using the XPENDING command.

发送成功,更新last_delivered_id

2、操作

2.1  group

只有新增,删除操作。

2.1.1    xgroup create

格式:

XGROUP CREATE key groupname <id | $> [MKSTREAM] [ENTRIESREAD entries_read]

  Xgroup是管理group的命令,后续跟子命令,当为create时,创建group。

第一部分,XGROUP CREATE, 命令名称。略。

第二部分,key,指定streams的key值。

第三部分,groupname,指定组的名称。

第四部分,id,指定stream中的任意ID,$表示当前stream ID的最大值,group包含从id开始的信息,指定0-0,则为全部,指定$,为最新信息。

第五部分,MKSTREAM,当key值不存在时,默认为错误,当添加该选项之后,会创建stream。

第六部分,ENTRIESREAD id,略。

示例:

XGROUP CREATE mystream mygroup $ MKSTREAM

2.1.2    xgroup destroy

格式:

XGROUP DESTROY key groupname

  Xgroup是管理group的命令,后续跟子命令,当为destory时,删除group.

2.1.3    xinfo groups key

查询group的信息,略。

2.2  consumer

2.2.1    xgroup createconsumer

格式:

XGROUP CREATECONSUMER key groupname consumername

  Xgroup是管理group的命令,后续跟子命令,当为createconsumer时,创建consumer。

示例:略。

2.2.2    xgroup createconsumer

格式:

XGROUP DELCONSUMER key groupname consumername

  Xgroup是管理group的命令,后续跟子命令,当为delconsumer时,删除consumer。

示例:略。

2.2.3    xreadgroup

格式:

XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds][NOACK] STREAMS key [key ...] id [id ...]

  Consumer从group中读取stream,

其中key为stream的key值,id可以缩小范围,最小id,或者一次性提供多个id。Block设置读取方式,

当未读取到数据时,客户端处于pending状态。Count限定返回的条数。

第一部分,XREADGROUP GROUP命令名称,略

第二部分,group,组的名称。

第三部分,consumer, consumer在组中的唯一标识。

第四部分,count,限制每个stream的返回结果。

第五部分,block,超时时间。

第六部分,NOACK, 全程为no acknowledge,添加此选项之后,这些消息不会记录在consumer的历史中。

第七部分,streams key id,指定组中的key值,起始id。

示例:

XREADGROUP GROUP mygroup myconsumer STREAMS mystream 0

2.2.4    xack

格式:

XACK key group id [id ...]

  当consumer处理完一条信息时,将其从组中删除。

第一部分,key, group,stream的key,组的名称。

第二部分,id,为stream中的一到多个id。

  示例:

xack mystream mygroup 1526569495631-0

2.2.5    xinfo consumers

格式:

xinfo consumers key group

  查询consumer在group组中获取到的stream,其中key值为stream的key。

示例:略。

2.3   stream

改变stream的状态命令。

2.3.1    xpending

  格式:

XPENDING key group [[IDLE min-idle-time] start end count [consumer]]

  查询组的PEL。Pel全程为pending list。查询处于pending状态的stream。

第一部分,XPENDING, 略。

第二部分,key,stream的key值。

第三部分,group,组的名称。

第四部分,IDLE, 处于PENDING状态时间超过min-idle-time。单位为毫秒。

第五部分,start, end,指定起始ID和截止ID。

第六部分, count,限定条数。

第七部分, consumer,组中consumer的唯一ID,若指定,只返回该consumer的PEL。

  示例:

XPENDING mystream mygroup IDLE 9000 - + 10 consumer-123

  返回mygroup中mystream,处于pending超出9秒, 归属于consumer~123的前10条信息。

2.3.2    xclaim

格式:

XCLAIM key group consumer min-idle-time id [id ...] [IDLE ms] [TIME unix-time-milliseconds] [RETRYCOUNT count] [FORCE] [JUSTID]  [LASTID id]

  改变组中处于PENDING状态消息的归属consumer。

第一部分,XCLAIM为命令名称,略。

第二部分,key,stream的key。

第三部分,group,组的名称。

第四部分,consumer,新的consumer id,必须在组中存在。

第五部分,min-idle-time,

第六部分, IDLE ms,指定消息处于PENDING的时间,指定为0时,相当于重置。

第六部分,TIME, 指定相对时间,用于计算PENDING。

第七部分,RETRYCOUNT,指消息失败的次数。指定为0时,相当于重置。

第八部分,FORCE,当ID不存在时,创建该ID,并添加到PEL中。

第九部分,JUSTID,略。

xautoclaim等价于先执行xpending, 然后执行xclaim。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章