发布与订阅
Pub/Sub模式应该非常熟悉,在现实应用中被广泛的使用。如:微博中关注某个号,这个号有发新博时,关注的都会收到;github上watch了某个项目,当有issue时,就会发邮件。
Redis是支持发布与订阅的,当然大多数场景中可以使用MQ达到同样的效果。
Redis中支持的发布与订阅
Redis中是以订阅某个或者多个频道Channel,表示其感兴趣的内容。当有发布者向频道Channel中发布消息时,订阅者就可以收到其感兴趣的消息。订阅者和发布者之间去耦合
Redis通过三个命令Subscribe/UnSubscribe/Publish三者完成订阅与发布。
- Subscribe订阅某个或者多个频道Channel
- UnSubscribe取消订阅
- Publish向某个频道发布消息
1.订阅单个频道
subscribe foo
2.订阅多个频道
subscribe foo bar
3.模式订阅
psubscribe foo.*
4.发布消息
publish foo message
5.取消订阅
unsubscribe foo
Redis发布订阅的格式
订阅时、取消订阅时、收到的订阅的消息都响应都将以数组的形式体现,如:
127.0.0.1:6379> subscribe foo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "foo"
3) (integer) 1
1) "message"
2) "foo"
3) "m1"
- 第一元素表示操作类型:订阅、取消订阅、消息
- 第二个元素表示订阅的频道、收到哪个频道的消息
- 第三个元素表示订阅了第几个频道、承载的消息体
Redis的发布订阅作用域
- Redis的发布订阅与与键空间是独立的,对键空间没有任和影响;
- Redis中的模式订阅,将订阅模式匹配上的所有频道;
- 只支持对订阅后的发布的消息获取,不支持获取订阅前发布的消息将;
对于java版本的jedis操作发布订阅可查看PublishSubscribeCommandsTest.java
应用场景
对于不可靠的、轻量级消息传递型的发布与订阅可以考虑使用,因为比较轻量级易于使用。但是大多数发布订阅还是使用MQ比较合适。