Python Redis stream xread with“$”

cgvd09ve  于 9个月前  发布在  Redis
关注(0)|答案(1)|浏览(82)

Python Redis不支持"$"吗?更新流时,以下内容将不会返回记录。
redis.xread(streams={"stream_name": "$"}, count=None, block=0)

rwqw0loc

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中:

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:

async-timeout==4.0.3
redis==5.0.0

Python版本:

$ python --version
Python 3.10.7

相关问题