流是一种简单但通用且强大的数据结构,允许你在Redis中实现流。流是Redis 5.0版本的内置类型,可以帮助消除日志数据结构的限制。
在这篇文章中,我们将专注于使用和处理Redis流,而不是实际实现。
Redis创建流
要在Redis中创建一个流,我们使用XADD命令,后面跟着流的名称、ID、key和data作为参数。
语法如下所示:
XADD [stream name] [id] [key] [data]
例子如下所示:
127.0.0.1:6379> XADD datastream * ip 231.17.140.219
"1646904960928-0"
在上面的例子中,我们运行XADD命令来添加一个新的流条目。在我们的例子中,给条目datastream加上一个唯一的ID。
尽管你可以手动设置一个ID,但我们使用星号告诉Redis自动生成一个唯一的标识符。这就是上面命令的输出。
注意:每一个生成的IP都是在以前的基础上单调递增的。在大多数情况下,你很少需要为一个条目手动设置ID。我们可以按照下面的命令来做。
127.0.0.1:6379> XADD datastream 74376383723373 ip 171.17.140.219
"74376383723373-0"
在上面的命令中,我们手动指定条目ID。
该条目持有一个字段和值IP以及相应的IP。
Redis添加带限制的流
在某些情况下,你可能不希望流条目超过一个指定的值。你可以通过指定MAXLEN参数来做到这一点。
XADD datastream MAXLEN 100 * ip 231.17.140.219
Redis流条目
要获得Redis流中的条目数,我们可以使用XLEN命令,如:
127.0.0.1:6379> XLEN datastream
(integer) 3
这应该返回一个整数,表示流中的条目数。
从流中获取数据
我们可以通过指定开始和结束的ID来迭代流中的条目,如命令中所示:
127.0.0.1:6379> XRANGE datastream - +
1) 1) "1646904960928-0"
2) 1) "ip"
2) "231.17.140.219"
2) 1) "74376383723373-0"
2) 1) "ip"
2) "231.17.140.219"
3) 1) "74376383723373-1"
2) 1) "ip"
2) "231.17.140.219"
使用-+(下限和上限)参数可以返回流中的所有条目。你也可以指定一个范围,如:
127.0.0.1:6379> XRANGE datastream 1646904960928-0 74376383723373-0
1) 1) "1646904960928-0"
2) 1) "ip"
2) "231.17.140.219"
2) 1) "74376383723373-0"
2) 1) "ip"
2) "231.17.140.219"
该命令应该返回指定ID范围内的条目。
Redis读取所有条目
要从顶部开始读取流中的每个条目,使用XREAD命令,如下所示:
127.0.0.1:6379> XREAD COUNT 100 STREAMS datastream 0
1) 1) "datastream"
2) 1) 1) "1646904960928-0"
2) 1) "ip"
2) "231.17.140.219"
2) 1) "74376383723373-0"
2) 1) "ip"
2) "231.17.140.219"
3) 1) "74376383723373-1"
2) 1) "ip"
2) "231.17.140.219"
要想只读取新到的数据,使用命令为:
127.0.0.1:6379> XREAD BLOCK 10000 STREAMS datastream $
该命令将从任何流条目中等待指定的毫秒,然后关闭。在我们的例子中,我们将等待时间设置为10000毫秒。
总结
本教程提供了在Redis中使用数据流的基础知识。