MQ 系统
Redis 提供了两种方式来作消息队列:
- 生产者/消费者模式 模式 (采用 redis 的 list 类型)
- 一个或者多个客户端监听消息队列, 一旦消息到达, 消费者马上消费, 谁先抢到算谁的, 如果队列里没有消息, 则消费者继续监听
- 发布/订阅 模式 (redis 自实现的一种__观察者__模式)
- 一个或多个客户端订阅消息频道, 只要发布者发布消息, 所有订阅者都能收到消息
简单的说
- 第一种队列方式, 一个任务只会被一个客户端消费
- 第二种队列方式, 一个任务会被所有客户端消费
发布订阅模式
这可以说是一种__观察者__模式
发布订阅模式中有两个角色: 发布者 和 订阅者
__订阅者__可以订阅一个或多个频道(channel)
__发布者__可以向指定频道发布消息(publish)
所以订阅了该频道的订阅者都将接受到该消息.
subscribe 订阅
- subscribe channel1 channel2 …
- 订阅一个或多个频道
- 如 subscribe news.it
- 使用 subscribe 时的返回值
- 1) “subscribe”
- 返回值的类型: 显示订阅成功
- 2) “news.it”
- 订阅的频道
- 3) (integer) 1
- 目前已订阅的模式的数量(包含自身)
- 1) “subscribe”
- 接收到消息时的返回值
- 1) “message”
- 返回值的类型: 消息
- 2) “news.it”
- 消息本身的频道
- 3) “Google buy Motorola”
- 消息的内容
- 1) “message”
- 使用 subscribe 时的返回值
unsubscribe 退订
- unsubscribe channe1 channe2 …
- 退订通过 subscribe 订阅的频道
- 如果没有频道被指定, 那么客户端通过 subscribe 订阅的所有频道都会被退订
- 退订通过 subscribe 订阅的频道
psubscribe 订阅(RegEx)
- psubscribe mode1 mode2 …
- 订阅一个或多个符合给定模式(RegEx)的频道
- * 匹配所有字符
- ? 匹配一个任意字符
- [] 匹配字符组
- \x 匹配转义字符
- 如 psubscribe news.*
- 使用 subscribe 时的返回值
- 1) “ppsubscribe”
- 返回值的类型: 显示订阅成功
- 2) “news.*”
- 订阅的频道模式
- 3) (integer) 1
- 目前已订阅的模式的数量(包含自身)
- 1) “ppsubscribe”
- 接收到消息时的返回值
- 1) “pmessage”
- 返回值的类型: 消息
- 2) “news.*”
- 消息匹配的频道模式
- 3) “news.it”
- 消息本身的频道
- 4) “Google buy Motorola”
- 消息的内容
- 1) “pmessage”
- 使用 subscribe 时的返回值
- 订阅一个或多个符合给定模式(RegEx)的频道
punsubscribe 退订
- punsubscribe mode1 mode2 …
- 退订通过 psubscribe 订阅的频道
- 如果没有频道被指定, 那么客户端通过 psubscribe 订阅的所有频道都会被退订
- 退订通过 psubscribe 订阅的频道
publish 发布
- publish channel message
- 发布消息, 返回接收到这个消息的客户端个数
pubsub 自省
pubsub 是一个查看订阅与发布系统状态的内省命令,它由数个不同格式的子命令组成.
参考连接: http://doc.redisfans.com/pub_sub/pubsub.html
☠