1. Stream 类型介绍
Stream是Redis5.0 引入的一个新的数据类型,官方把它定义为:以更抽象的方式模拟日志的数据结构。Redis的streams主要是一个append only的数据结构,至少在概念上它是一种在内存中表示的抽象数据类型,只不过它们实现了更强大的操作,以克服日志文件本身的限制。
如果你了解MQ,那么可以把streams当做MQ。如果你还了解kafka,那么甚至可以把streams当做kafka。
streams数据结构本身非常简单,但是streams依然是Redis到目前为止最复杂的类型,其原因是实现的一些额外的功能:一系列的阻塞操作允许消费者等待生产者加入到streams的新数据。另外还有一个称为Consumer Groups的概念,这个概念最先由kafka提出,Redis有一个类似实现,和kafka的Consumer Groups的目的是一样的:允许一组客户端协调消费相同的信息流!
2. Stream指令
2.1 增加对象或向已存在对象追加元素
xadd key ID field string [field string ...]
ID包含两部分:时间戳(毫秒)-sequence(同一毫秒的数列号)组成。用*
可以代替默认值,也可以自己指定
127.0.0.1:6379> xadd s1 * 宿命荒芜 至少我有风骨
1647422390375-0
127.0.0.1:6379> xadd s2 0-1 岁月掩埋 休想把我沉浮
0-1
127.0.0.1:6379>
2.2 查询元素个数
xlen key
127.0.0.1:6379> xadd s1 * 一炉造化荒天 默
1647422691708-0
127.0.0.1:6379> xlen s1
2
127.0.0.1:6379>
2.3 删除ID
xdel key ID [ID ...]
127.0.0.1:6379> xadd s2 1-1 ab cd
1-1
127.0.0.1:6379> xadd s2 1-2 ef gh
1-2
127.0.0.1:6379> xlen s2
3
127.0.0.1:6379> xdel s2 1-1
1
127.0.0.1:6379> xlen s2
2
127.0.0.1:6379>
2.4 返回给定ID范围的数据
xrange key start end
特殊ID:- 最小ID + 最大ID
127.0.0.1:6379> xrange s1 - +
1647422390375-0
宿命荒芜
至少我有风骨
1647422691708-0
一炉造化荒天
默
127.0.0.1:6379> xrange s2 0-1 1-2
0-1
岁月掩埋
休想把我沉浮
1-2
ef
gh
127.0.0.1:6379>
2.5 从一个或多个stream对象中读取数据
xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
count 是指定ID后的几条
BLOCK 0:永久阻塞;$:表示获取最新的数据
127.0.0.1:6379> xadd s2 2-1 kl mn
2-1
127.0.0.1:6379> xread streams s2 0-1
s2
1-2
ef
gh
2-1
kl
mn
127.0.0.1:6379> xread count 1 streams s2 0-1
s2
1-2
ef
gh
127.0.0.1:6379> xread block 0 streams s2 $
被阻塞在那了,等待新数据进来
2.6 xgroup 和 xreadgroup
- 创建一个消费组
xgroup [CREATE key groupname id]
将key中指定ID后面的元素加入到消费组中 - 从消费组中读取数据
xreadgroup GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
需要写出消费组名字、添加消费者名字
>
表示读取所有
被一个消费者读取了就不能被其他消费者读取了
127.0.0.1:6379> xgroup create s1 test1 1647422390375-0 # 将指定ID之后(不包括指定ID)的数据加入到消费组
OK
127.0.0.1:6379> xreadgroup group test1 cons1 streams s1 >
s1
1647422691708-0
一炉造化荒天
默
1647424384713-0
一身风骨
擎天破
127.0.0.1:6379> xreadgroup group test1 cons1 streams s1 1647422390375-0
s1
1647422691708-0
一炉造化荒天
默
1647424384713-0
一身风骨
擎天破
127.0.0.1:6379>
网友评论