假设有一个redis-client订阅频道c1
而另一个redis-client将“数据”发布到频道c1
。
此时,当订阅“c1”的客户端获取数据(通过调用pubsub.listen()
或pubsub.get_message()
)或直接转到数据库时,发布的数据是否在redis-server中待定客户通过redis-server订阅频道c1
?
换句话说,当redis-client调用pubsub.getMessage()
或pubsub.listen()
时,redis-client是否向redis-server发送请求以获取数据或仅从本地套接字缓冲区获取数据?< / p>
当我阅读一些文档时,它说pubsub.get_message()
在内部使用select模块作为套接字。
这似乎意味着订阅的数据已经在客户端本地缓冲区中,而不是服务器。
你可以给我任何建议吗?答案 0 :(得分:3)
当客户端执行PUBLISH时,此命令会立即将消息推送到对其感兴趣的所有套接字中。消息不存储在redis中。如果客户在发布时没有订阅,他将永远不会看到该消息。
我不熟悉redis的python驱动程序,但从名称判断,我猜listen
发送SUBSCRIBE
命令,get_message
从本地发送消息缓冲液中。
答案 1 :(得分:0)
Redis pubsub 开火,忘了。
换句话说,当发送publish
命令时,在线订阅者收到该消息,并且在发送publish
命令时谁没有订阅/收听消息,赢得&永远不会收到这些消息。