在某些方面,你可以以为流是 Redis 列表的一个加强版本。流元素不再是一个单一的字符串,而是一个字段和值构成的工具。范畴查询更合用并且更快。在流中,每个条目都有一个 ID,它是一个逻辑偏移量。差异的客户端可以阻塞守候比指定的 ID 更大的元素。Redis 流的一个根基的呼吁是 XADD 。是的,全部的 Redis 流呼吁都是以一个 X 为前缀的。
> XADD mystream * sensor-id 1234 temperature 10.5 1506871964177.0
这个 XADD 呼吁将追加指定的条目作为一个指定的流 —— “mystream” 的新元素。上面示例中的这个条目有两个字段:sensor-id 和 temperature ,每个条目在统一个流中可以有差异的字段。行使沟通的字段名可以更好地操作内存。故意思的是,字段的排序是可以担保次序的。XADD 仅返回插入的条目标 ID,由于在第三个参数中是星号(* ),暗示由呼吁自动天生 ID。凡是这样做就够了,可是也可以去逼迫指定一个 ID,这种环境用于复制这个呼吁到从处事器和 AOF 文件。
这个 ID 是由两部门构成的:一个毫秒时刻和一个序列号。1506871964177 是毫秒时刻,它只是一个毫秒级的 UNIX 时刻戳。圆点(. )后头的数字 0 是一个序号,它是为了区分沟通毫秒数的条目增进上去的。这两个数字都是 64 位的无标记整数。这意味着,我们可以在流中增进全部想要的条目,纵然是在统一毫秒中。ID 的毫秒部门行使 Redis 处事器的当前当地时刻天生的 ID 和流中的最后一个条目 ID 两者间的最大的一个。因此,举例来说,纵然是计较机时刻回跳,这个 ID 如故是增进的。在某些环境下,你可以以为流条目标 ID 是完备的 128 位数字。然而,究竟上它们与被添加到的实例的当地时刻有关,这意味着我们可以在毫秒级的精度的范畴随意查询。
正如你想的那样,快速添加两个条目后,功效是仅一个序号递增了。我们可以用一个 MULTI /EXEC 块来简朴模仿“快速插入”:
> MULTI OK > XADD mystream * foo 10 QUEUED > XADD mystream * bar 20 QUEUED > EXEC 1) 1506872463535.0 2) 1506872463535.1
在上面的示例中,也展示了无需指定任何初始模式的环境下,对差异的条目行使差异的字段。会产生什么呢?就像前面提到的一样,只有每个块(它凡是包括 50-150 个动静内容)的第一个动静被行使。而且,沟通字段的持续条目都行使了一个符号举办了压缩,这个符号暗示与“它们与这个块中的第一个条目标字段沟通”。因此,行使沟通字段的持续动静可以节减很多内存,纵然是字段集跟着时刻产生迟钝变革的环境下也很节减内存。
为了从流中检索数据,这里有两种要领:范畴查询,它是通过 XRANGE 呼吁实现的;流播,它是通过 XREAD 呼吁实现的。XRANGE 呼吁仅取得包罗从开始到遏制范畴内的所有条目。因此,举例来说,假如我知道它的 ID,我可以行使如下的定名取得单个条目:
> XRANGE mystream 1506871964177.0 1506871964177.0 1) 1) 1506871964177.0 2) 1) "sensor-id" 2) "1234" 3) "temperature" 4) "10.5"
不管奈何,你都可以行使指定的开始标记 - 和遏制标记 + 暗示最小和最大的 ID。为了限定返回条目标数目,也可以行使 COUNT 选项。下面是一个更伟大的 XRANGE 示例:
> XRANGE mystream - + COUNT 2 1) 1) 1506871964177.0 2) 1) "sensor-id" 2) "1234" 3) "temperature" 4) "10.5" 2) 1) 1506872463535.0 2) 1) "foo" 2) "10"
这里我们讲的是 ID 的范畴,然后,为了取得在一个给按时刻范畴内的特定范畴的元素,你可以行使 XRANGE ,由于 ID 的“序号” 部门可以省略。因此,你可以只指定“毫秒”时刻即可,下面的呼吁的意思是:“从 UNIX 时刻 1506872463 开始给我 10 个条目”:
127.0.0.1:6379> XRANGE mystream 1506872463000 + COUNT 10 1) 1) 1506872463535.0 2) 1) "foo" 2) "10" 2) 1) 1506872463535.1 2) 1) "bar" 2) "20"
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|