角色
发布者publisher
订阅者subscriber
频道channel
发送者发送消息到一个频道,每一个订阅该频道的订阅者都能收到这条消息,不是只有一个订阅者抢到,这一点跟消息队列不同。
每一个订阅者是可以订阅多个频道的。
新的订阅者,收不到该频道之前的消息。
命令
注意,发送者和订阅者要在不同的客户端
publish channel message 发布命令到一个频道,返回的结果是该频道当前订阅者数量。
node1:0>publish channel1 "hello channel 1"
"0"
node1:0>publish channel1 "hello channel 2"
"0"
node1:0>
subscribe channel 订阅一个或多个频道。
unsubscribe channel 取消一个或者多个订阅
pubsub channels 列出至少有一个订阅者的频道
pubsub numsub channel 列出指定频道的订阅者数量
模式匹配订阅
Redis 的Pub/Sub实现支持模式匹配。客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息。
比如:
psubscribe news.*
将接收所有发到以news开头的频道的消息,所有模式都是有效的,所以支持多通配符。
punsubscribe news.*
将取消订阅匹配该模式的客户端,这个调用不影响其他订阅。
当作模式匹配结果的消息会以不同的格式发送:
- 消息类型是pmessage:这是另一客户端发出的PUBLISH命令的结果,匹配一个模式匹配订阅。第一个元素是原匹配的模式,第三个元素是原频道名称,最后一个元素是实际消息内容。
同样的,系统默认 SUBSCRIBE 和 UNSUBSCRIBE, PSUBSCRIBE 和 PUNSUBSCRIBE 命令在发送 psubscribe 和punsubscribe类型的消息时使用像subscribe 和 unsubscribe一样的消息格式。