3

我有一个 Web 服务,它非常频繁地向 Redis 服务器写入新条目,并且我有一个 NodeJS 应用程序,它将与 Redis 服务器交互。我意识到我可能会问一个过去以多种形式提出的问题,但我必须问一下,以免我花更多时间在圈子里寻找答案,但是“我的 NodeJS 应用程序服务器有什么方法可以自动收到新条目?'; 类似于 RSS 提要如何自动接收新文章。

我知道 Redis 有一个发布/订阅范式,但我难以理解的是“Redis 可以在收到新条目时自动发布它们吗?” 此外,Redis 是否可以在收到特定键时自动发布新条目?

4

1 回答 1

5

node.js 有 redis 客户端。找到一个实现完整协议的协议,包括subscribe.

订阅(或模式的 psubscribe)使用 akey来指定连接通道。因此,例如(使用https://github.com/mranney/node_redis

connection.on("message", function (channel, message) {
   if (channel == "myInterestingChannel") {
       console.log(message);
   } else if (channel == "anotherChannel") {
       console.warn(message);
   }
}

connection.subscribe("myInterestingChannel");
connection.subscribe("anotherChannel");

然后,当您希望您的 node.js 代码了解这些渠道之一中的某些内容时,只需发布​​一条消息。例如在 python 的 redis 客户端中:

connection.publish("myInterestingChannel", "poop goes in the potty");

在您的问题中,您问“此外,Redis 是否可以在收到特定密钥时自动发布新条目?”

如果您将它们发布到正在订阅的频道上,则可以。但是,当您执行类似的操作时,它不能自动发布

connection.set("myInterestingChannel", "some other message")

相反,如果您想存储它并让您的节点应用程序知道,您可以最轻松地执行以下操作:

msg = "some other message"
connection.set("some key", msg)
connection.publish("myInterestingChannel", msg)
于 2013-01-04T07:56:58.163 回答