Fork me on GitHub
余鸢

使用redis发布和订阅

Redis已publish/subscribe发送消息。 这是通过订阅频道并发布到频道来处理的。订阅者将订阅一个或多个频道。 发布商不需要知道谁是所有订阅者。 相反,发布商会发布到特定频道。 订阅该频道的所有订阅者都会收到该消息。 发布者和订阅者的这种解耦可以允许更大的可伸缩性和更动态的网络拓扑。

示例:用户订阅2个频道说foo&boo

1
SUBSCRIBE foo boo

在控制台的redis-client1:

1
2
3
4
5
6
7
8
127.0.0.1:6379> SUBSCRIBE foo boo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "foo"
3) (integer) 1
1) "subscribe"
2) "boo"
3) (integer) 2

它将开始侦听消息。 发布时将获取相应通道的数据。

例如:当想要与boo连接的所有订阅者发送消息时,需要发布到该频道。

1
PUBLISH boo "Hello Boo"

在控制台的redis-client1:

1
2
3
1) "message"
2) "boo" //频道名称
3) "Hello Boo" //实际数据

要在任何时候取消订阅频道,请使用:

1
2
UNSUBSCRIBE // 取消订阅所有频道
UNSUBSCRIBE foo // 取消订阅特定频道

可以根据模式订阅。 当频道名称不确定/想基于模式使用PSUBSCRIBE订阅。

同样退订基于模式使用PUNSUBSCRIBE。

语法:
  • SUBSCRIBE channel [channel ...]
  • UNSUBSCRIBE [channel [channel ...]]
  • PUBLISH channel message
  • PSUBSCRIBE pattern [pattern ...]
  • PUNSUBSCRIBE [pattern [pattern ...]]

要处理redis中的pub / sub,需要有一个客户端用于订阅和不同的客户端以进行发布。 两者不能由同一客户端处理。 虽然所有其他命令仍然可以用同一客户端处理。