Redis 自从2.0版本后,增加发布与订阅等新特性,该功能有点类似设计模式中的观察者模式,对消息的生产者与接收者进行松耦合。也可以用该特性实现系统与系统之间的消息传递,该功能的
的实现非常实用和高效。
下面我们介绍一下,如何使用发布与订阅 。redis提供发布与订阅几个命令:
- PUBLISH
- SUBSCRIBE
- PSUBSCRIBE
- UNSUBSCRIBE
- PUNSUBSCRIBE
- PUBLISH channel message
- 将信息 message 发送到指定的频道 channel 。
- SUBSCRIBE channel [channel ...]
- 订阅给定的一个或多个频道的信息。
- PSUBSCRIBE pattern [pattern ...]
- 订阅一个或多个符合给定模式的频道。
- PUNSUBSCRIBE [pattern [pattern ...]]
- 指示客户端退订所有给定模式。
- UNSUBSCRIBE [channel [channel ...]]
- 指示客户端退订给定的频道。
发布消息
redis 10.40.14.77:8379> publish testchannel testc
(integer) 1
redis 10.40.14.77:8379> publish testchannel 'test message'
(integer) 1
redis 10.40.14.77:8379> publish testchannel 'a am'
(integer) 1
redis 10.40.14.77:8379> publish testchannel 'china'
(integer) 1
redis 10.40.14.77:8379>
订阅消息
redis 10.40.14.77:8379> subscribe testchannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testchannel"
3) (integer) 1
1) "message"
2) "testchannel"
3) "test"
1) "message"
2) "testchannel"
3) "test"
1) "message"
2) "testchannel"
3) "testc"
1) "message"
2) "testchannel"
3) "test message"
1) "message"
2) "testchannel"
3) "a am"
1) "message"
2) "testchannel"
3) "china"
上述示例,从一个客户端打开发送消息,在另一客户端接收消息,频道名:testchannel 。
也要以一次性订阅多个channel
redis 10.40.14.77:8379> publish c1 'hello world'
(integer) 1
redis 10.40.14.77:8379> publish c2 'hello world c2'
(integer) 1
订阅 消息方
redis 10.40.14.77:8379> subscribe c1 c2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "c1"
3) (integer) 1
1) "subscribe"
2) "c2"
3) (integer) 2
1) "message"
2) "c1"
3) "hello world"
1) "message"
2) "c2"
3) "hello world c2"
也可以指定一个或多个pattern订阅消息
redis 10.40.14.77:8379> publish c1.news 'hello world news '
(integer) 1
redis 10.40.14.77:8379> publish c1.pics 'hello world pics'
(integer) 1
redis 10.40.14.77:8379>
订阅消息方
eading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "c1.*"
3) (integer) 1
1) "pmessage"
2) "c1.*"
3) "c1.news"
4) "hello news cannel"
1) "pmessage"
2) "c1.*"
3) "c1.pics"
4) "hello pics chnnale"
1) "pmessage"
2) "c1.*"
3) "c1.news"
4) "hello world news "
1) "pmessage"
2) "c1.*"
3) "c1.pics"
4) "hello world pics"