一、发布订阅
发布订阅是消息传递的一种方式,即发布者发布消息,订阅者获取消息,中间传输的是一种消息,所以应该有四个必须的要素:发布者、订阅(接受)者、通道、消息。在Redis里,由于redis分客户端和服务端,redis服务端提供服务,所以发布者(publishser)和订阅者(subscriber)都是客户端,通道(channel)是服务端,只有subscirber订阅了某个或某一类型的channel,才能消费publisher发往此channel的消息,而且消息是一次性实时消费,不会持久化到channel中,也就是redis是不会持久化消息。如下图所示:
二、命令
- 订阅:subscribe channel1 [channel2 ...] :订阅一个多个给定的通道。
- 发布:publish channel1 message :将制定的信息发布到给定的通道中。
- 系统状态:pubsub subcommand argument [argument ...] :查看订阅和发布系统的状态。
- 退订:unsubscribe channel1 [channel2 ...]:退订(取消)一个多个给定的通道。
- 模式订阅:psubscribe pattern1 [pattern2 ...] :订阅符合一个多个给定模式的通道。
- 模式退订:punsubscribe pattern1 [pattern2 ...] :退订符合一个多个给定模式的通道。
二、示列
- 订阅:在第一个客户端 进行订阅testChanel:
127.0.0.1:6379> publish testChanel helloword
(integer) 1
127.0.0.1:6379>
- 发布:在的第二个客户端发布消息到testChanel,第一个客户端就可要接收到消息。
127.0.0.1:6379> publish testChannel helloword
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> subscribe testChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testChannel"
3) (integer) 1
1) "message"
2) "testChannel"
3) "helloword"
- 模式订阅:在第一个客户端进行模式订阅。
127.0.0.1:6379> subscribe test*
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test*"
3) (integer) 1
- 发布到模式通道:
127.0.0.1:6379> publish test* helloword
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> subscribe test*
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test*"
3) (integer) 1
1) "message"
2) "test*"
3) "helloword"
三、参考文档