首页 > 解决方案 > 如何在redis-py中指定“>”

问题描述

我在redis 流文档中查看这个,它说:

是时候尝试使用消费者组阅读内容了:

> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526569495631-0
         2) 1) "message"
            2) "apple"

XREADGROUP 回复就像 XREAD 回复一样。但是请注意上面提供的 GROUP,它声明我想使用消费者组 mygroup 从流中读取数据,并且我是消费者 Alice。每次消费者对消费者组执行操作时,它必须指定其名称以在组内唯一标识该消费者。

上面的命令行中还有一个非常重要的细节,在强制 STREAMS 选项之后,为密钥 mystream 请求的 ID 是特殊 ID >。这个特殊的 ID 只在消费者组的上下文中有效,它意味着:消息从未传递给其他消费者。

我正在尝试在 redis-py 中指定“>”参数。

当我在这里查看文档时,我在流中看不到任何似乎让我这样做的参数。具体来说,我正在尝试:

>>> r.xreadgroup(mygroupname,myconsumer,{mystream : ">"},1)
[] # oh no, empty. WHY?!
# 
# even though
>>> r.xread({mystream: '1561950326849-0'}, count=1)
[[b'stuff-returned-successfully.]]

我错过了什么?为什么我不能指定一个“>”来表示看不见的消息?

标签: pythonredis

解决方案


您在这个问题中有一个错误的假设,即您有 /unseen/ 消息。该命令应该有效,但如果您已经看过所有消息一次,则不会。

尝试

# make sure you have not seen anything in your stream by resetting last seen to 0
>>> r.xgroup_setid(mystream,mygroupname,0) # RESET ALL

现在

r.xreadgroup(mygroupname,myconsumer,{mystream : ">"},1)

工作正常。


推荐阅读