Python Redis不支持"$"吗?更新流时,以下内容将不会返回记录。redis.xread(streams={"stream_name": "$"}, count=None, block=0)
"$"
redis.xread(streams={"stream_name": "$"}, count=None, block=0)
rwqw0loc1#
这绝对有效,它只会返回一些东西,如果流在运行代码后添加了一个新的条目。
import redis r = redis.Redis(host="localhost", port=6379, decode_responses=True) response = r.xread( streams = { "mystream": "$" }, count=None, block=0 ) print(response)
运行代码:
$ python app.py
在redis-cli中:
redis-cli
127.0.0.1:6379> xadd mystream * n 1 "1694185661724-0"
代码将立即返回:
[['mystream', [('1694185661724-0', {'n': '1'})]]]
现在,在redis-blog中:
127.0.0.1:6379> xadd mystream * n 2 "1694185942369-0"
现在再次运行代码,什么也不会发生(正如预期的那样,因为$是自我们开始阻塞以来添加的条目的ID:当阻塞时,有时我们希望只接收从阻塞时刻开始通过XADD添加到流中的条目。https://redis.io/commands/xread/如果你想从上一次代码运行停止的地方继续,你需要持久化从流中读取的最后一个条目ID,并将其作为参数提供给XREAD-这将给予你自上一个条目以来添加到流中的下一个条目,不管添加该条目时你的代码是否正在运行。此外,你不需要count=None-我建议在这里传递一个实际的数字,例如。1。注意,当我连接到Redis时,我使用decode_responses=True,这将使redis-py将字节数组解码为更有用的Python类型,例如。弦在这种情况下requirements.txt:
$
XREAD
count=None
1
decode_responses=True
async-timeout==4.0.3 redis==5.0.0
Python版本:
$ python --version Python 3.10.7
1条答案
按热度按时间rwqw0loc1#
这绝对有效,它只会返回一些东西,如果流在运行代码后添加了一个新的条目。
运行代码:
在
redis-cli
中:代码将立即返回:
现在,在redis-blog中:
现在再次运行代码,什么也不会发生(正如预期的那样,因为
$
是自我们开始阻塞以来添加的条目的ID:当阻塞时,有时我们希望只接收从阻塞时刻开始通过XADD添加到流中的条目。
https://redis.io/commands/xread/
如果你想从上一次代码运行停止的地方继续,你需要持久化从流中读取的最后一个条目ID,并将其作为参数提供给
XREAD
-这将给予你自上一个条目以来添加到流中的下一个条目,不管添加该条目时你的代码是否正在运行。此外,你不需要
count=None
-我建议在这里传递一个实际的数字,例如。1
。注意,当我连接到Redis时,我使用
decode_responses=True
,这将使redis-py将字节数组解码为更有用的Python类型,例如。弦在这种情况下requirements.txt:
Python版本: