如何使用 Python 解析 Redis Streams 数据?

问题描述

我需要一些帮助来获取 Python 中 Redis 流接收到的消息。例如,如果我通过流发送以下数据:

[['streamA',[('1611593593691-0',{'identifier': 'zxkbdnarrz','query': 'testQuery'})]]]

我从流中收到以下信息:

r1 = redis.Redis(host=redis_host,port=redis_port,password=redis_password,db=1,decode_responses=True)  

fromStreamA = r1.xread({'streamA': "$"},count=1,block=0)

这是我连接到 Redis Stream 的方式:

{}

理想情况下,我希望能够访问 ID Tired 1A No 1A No 1A Yes 1B No 1B No IC Yes ID No ID No 间的所有内容,以便我可以使用 Python JSON 模块将其作为字典访问。

我该怎么做? TIA!

解决方法

嗨,你可以这样做:

msg = [['streamA',[('1611593593691-0',{'identifier': 'zxkbdnarrz','query': 'testQuery'})]]]

[[stream,[[number,d]]]] = msg
print(d)
>>> {'identifier': 'zxkbdnarrz','query': 'testQuery'}

或者当您的消息如下所示时:

msg = [[b'streamA',[[b'1627026892700-0',[b'identifier',b'zxkbdnarrz',b'query',b'testQuery']]]]]

您可以使用此代码获取字典:

msg = [[b'streamA',b'testQuery']]]]]

[[stream,parts]]]] = msg
foo = (p.decode('utf-8') for p in parts)
d = dict(zip(foo,foo))
print(d)
>>> {'identifier': 'zxkbdnarrz','query': 'testQuery'}