简单地说,我们现在是Redis

了解更多

复述,最佳实践

发布/订阅

除了数据存储,Redis还可以作为一个发布者/订阅者平台。在此模式中,发布者可以向通道上任意数量的订阅者发送消息。这些消息是“fire-and-forget”,因为如果发布了一条消息,但没有订阅者,消息就会消失,无法恢复。

一旦订阅了通道,客户端就会进入订阅模式,客户端不能发出任何命令。通过这种方式,客户机变成只读的。出版没有这样的限制。

一次可以订阅多个频道。我们先订阅两个频道天气体育使用订阅命令。

>订阅天气运动阅读消息……(按Ctrl-C退出)1)“订阅”2)“天气”3)(整数)11)“订阅”2)“体育”3)(整数)2

在单独的客户端(本例中是单独的终端)中,我们可以将项发布到这些通道中的任何一个。我们可以通过运行PUBLISH命令来实现:

>发布体育加油工/ 7:树叶/ 1(整数)1

第一个参数是通道,第二个参数是消息。消息可以是任何东西,在本例中,它是一个编码的体育得分。它返回将被交付给的客户端的数量。回到订阅者模式客户端,我们将立即看到消息:

1)“消息”2)“体育”3)“加油工/ 7:树叶/ 1”

响应有三个元素:通知(消息),接着是通道,最后是消息本身。客户端在收到消息后立即返回监听。回到另一个,我们可以发布另一条消息:

>发布天气雪/-4c(整数)1

在另一个客户端,我们将看到相同的格式,但有另一个通道和事件:

1)“消息”2)“天气”3)“雪/ 4 c”

让我们发布发布到一个没有人订阅的频道:

发布货币CADUSD/0.787(整数)0

因为我们没有客户收听这个频道货币返回值是0。该消息现在已被删除,随后订阅货币通道将不会被通知此消息-消息被触发和它已经被遗忘。

除了订阅单个频道,Redis还允许基于模式的订阅。全局样式的模式和由PSUBSCRIBE命令启用:

>PSUBSCRIBE体育:*

这将为任何以“sports:*”开头的频道获取消息。在另一个客户端中,发出以下命令:

>出版体育:曲棍球油/7:叶/1(整数)1发布体育:篮球猛龙/33:步行者/7(整数)1发布天气:埃德蒙顿下雪/零下4度(整数)0

注意前两个命令如何返回1,而最后一个命令返回0。尽管我们没有直接的订户运动:曲棍球运动:篮球,它仍然被模式订阅接收。在我们订阅的客户机上,我们可以看到只有匹配模式的通道才返回结果。

1)“pmessage”2)“运动:*”3)“运动:曲棍球”4)“加油工/ 7:树叶/ 1”1)“pmessage”2)“运动:*”3)“运动:篮球”4)“猛禽/ 33:步行者队/ 7”

此响应与直接的SUBSCRIBE响应略有不同,因为它既有匹配的模式(2),也有实际的通道(3)。

Baidu