我有一个redis流“mystream”,我正在尝试使用:xread count 5块50000流mystream$阅读添加到mystream的5个新条目,并阻塞50秒。当我执行命令将数据添加到mystream时,使用:xadd mystream a 5 b 6公司阻塞的命令将退出,并给出一个条目作为输出。从现在到50年代,我是否可以使用xread命令接收多个附加条目,或者我是否需要多次调用xread来实现相同的功能?
wa7juj8i1#
你所要求的东西不是用来使用的 XREAD BLOCK . 我建议使用xrevrange命令:
XREAD BLOCK
xrevrange mystream + - COUNT 5
min:“+”-表示流的最高id,max:“-”-表示流的最低id。您还可以传递一个时间戳来限制 XREVRANGE 结果到所需时间 TIMESTAMP 秒前(含)。
XREVRANGE
TIMESTAMP
xrevrange mystream + 1596617691455 COUNT 5
上述建议没有达到同样的效果 blocking 行为。如果您仍然想对传入的数据做出React,您可以查看redis pub/sub。订阅一个主题,并编写自己的逻辑来处理传入的数据。有一个webchat示例。你也可以用 XREAD BLOCK 以检测 XREVRANGE 命令:
blocking
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)
1条答案
按热度按时间wa7juj8i1#
你所要求的东西不是用来使用的
XREAD BLOCK
. 我建议使用xrevrange命令:min:“+”-表示流的最高id,max:“-”-表示流的最低id。您还可以传递一个时间戳来限制
XREVRANGE
结果到所需时间TIMESTAMP
秒前(含)。上述建议没有达到同样的效果
blocking
行为。如果您仍然想对传入的数据做出React,您可以查看redis pub/sub。订阅一个主题,并编写自己的逻辑来处理传入的数据。有一个webchat示例。你也可以用
XREAD BLOCK
以检测XREVRANGE
命令:很抱歉,我不能用c语言提供示例,这里是python: