redis流使用xread获取多个值

i7uq4tfw  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(451)

我有一个redis流“mystream”,我正在尝试使用:
xread count 5块50000流mystream$
阅读添加到mystream的5个新条目,并阻塞50秒。当我执行命令将数据添加到mystream时,使用:
xadd mystream a 5 b 6公司
阻塞的命令将退出,并给出一个条目作为输出。
从现在到50年代,我是否可以使用xread命令接收多个附加条目,或者我是否需要多次调用xread来实现相同的功能?

wa7juj8i

wa7juj8i1#

你所要求的东西不是用来使用的 XREAD BLOCK . 我建议使用xrevrange命令:

xrevrange mystream + - COUNT 5

min:“+”-表示流的最高id,max:“-”-表示流的最低id。您还可以传递一个时间戳来限制 XREVRANGE 结果到所需时间 TIMESTAMP 秒前(含)。

xrevrange mystream + 1596617691455 COUNT 5

上述建议没有达到同样的效果 blocking 行为。如果您仍然想对传入的数据做出React,您可以查看redis pub/sub。订阅一个主题,并编写自己的逻辑来处理传入的数据。有一个webchat示例。
你也可以用 XREAD BLOCK 以检测 XREVRANGE 命令:

XREAD COUNT 5 BLOCK 50000 STREAMS mystream $
XREVRANGE mystream + [returned_xread_key] COUNT 5

很抱歉,我不能用c语言提供示例,这里是python:

import redis
import time
redis_client = redis.StrictRedis("0.0.0.0", decode_responses=True)
response = redis_client.xread({'mystream': "$"}, count=1, block=50000)
if len(response) > 0:
    min_value = response[0][1][0][0] # [['mystream', [('1596618943439-0', {'mykey': 'myval'})]]]
    time.sleep(50) # wait for the end of the window
    entries = redis_client.xrevrange('mystream', max="+", min=min_value, count=5)

相关问题