雪花

redis 学习

一、Redis Streams

xadd:添加消息
xread:消费消息
xdel:删除消息
xgroup:消费组管理
xreadgroup:分组消费
xrange: 获取没有删除标识的消息列表
xlen:获取整个Stream的消息长度
del:删除整个Stream的消息
xdel:删除消息
xpending: 查看未处理消息
xack:确认消息已经被处理
xclaim:转移消息
xinfo:查看队列信息
xtrim:消息队列容量
xrevrange:逆序获取消息队列中的消息

xadd

添加消息,可以把数据添加到流的redis命令,id是增量的,可以使用maxlen来限制流大小,但是会有一些性能损失,但如果在后面加个~来使他高效一些,*代表采用内部生成的id

xadd stream [MAXLEN ~ count][id][field value][field value]

 1、每一组消息需要一个唯一的Id,*号表示服务器自动生成ID,后面顺序跟着一组或者多组消息(filed value)

 2、消息ID的形式是timestampInMillis-sequence,例如1527846880572-5,它表示当前的消息在毫米时间戳1527846880572时产生,并且是该毫秒内产生的第5条消息

消息ID可以由服务器自动生成,也可以由客户端自己指定,但是形式必须是整数-整数,而且必须是后面加入的消息的ID要大于前面的消息ID

3、消息元素的的结构为key-value,必须成对出现,如果key或者value元素中有空格,必须用"abc  def"或者'abc  def'括起来

示例

xadd mystream * who me when now what person;
xadd mystream maxlen 1000 * name 1;
xadd mystream maxlen ~ 1000 * name 2;

如图

 效果如下:

也可以自己指定EntryID的值,如:

XADD somestream 0-1 field value

如下:

xread

使用 XREAD 以阻塞或非阻塞方式获取消息列表 ,语法格式:

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
  • count :数量
  • milliseconds :可选,阻塞毫秒数,没有设置就是非阻塞模式
  • key :队列名
  • id :消息 ID
xread count 2 streams Master 0-0

如图

 续...

客户端1中执行以下操作

XREAD BLOCK 0 STREAMS Master $

注意,无光标,它将进入等待状态。

你向客户端2添加元素:

XADD Master * test 1

刚添加的元素将显示在客户端1中:

 显示结果

 续...

 

xdel

代表删除消息,可以接多个id

xdel mystream 1600608058992-0

如图:

如下

xlen

返回流中的条目数,如果键不存在或流为空,返回0

xlen mystream

如图:

xrange

要根据范围查询Stream,我们只需要提供两个ID,即start 和 end。返回的区间数据将会包括ID是start和end的元素,因此区间是完全包含的。两个特殊的ID- 和 +分别表示可能的最小ID和最大ID。

xrange Master - +

可以只取前两个 

xrange Master - + COUNT 2

 如图:

起始指定为- +表示查询所有的,相应的可以把这两个换成时间,例如取某个时间段的

XRANGE Master 1610333414346 1610333809575

如图:

 

 二、消费组

当流的数量非常大时, 或者当使用者处理非常耗时时, 如果只有一个使用者, 它将承受更大的压力。因此, redis流提供了使用者组的概念, 从而允许多个使用者处理同一个流以实现负载平衡。

 

 

  

posted @ 2021-01-11 11:24  十色  阅读(388)  评论(0编辑  收藏  举报