Redis消息通知
1、任务队列
松耦合:生产者与消费者无需知道彼此的实现细节,只需要约定好任务的描述格式。
易于扩展:消费者可以有多个,而且可以分布在不同的服务器中。
2、Redis实现任务队列
BRPOP命令和RPOP命令相似,唯一的区别是当列表中没有元素时BRPOP命令会一直阻塞住连接,直到有新元素加入。
BRPOP命令接收两个参数,第一个是键名,第二个是超时时间,单位是秒。
除了BRPOP命令外,Redis 还提供了BLPOP,和BRPOP的区别在于从队列取元素时BLPOP会从队列左边取。
3、优先级队列
BRPOP命令可以同时接收多个键,其完整的命名格式为 BRPOP key [key ......] timeout 同时检测多个键,如果所有键都没有元素则阻塞,如果其中有一个键有元素则会从该键中弹出元素。如果多个键都有元素则按照从左到右的顺序取第一个键中的元素。
4、发布/订阅(publish/subscribe)模式
包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。
发布者发布消息的命令是 PUBLISH , 用法是 PUBLISH channel message 返回值表示接收到这条消息的订阅者数量。
订阅频道的命令是 SUBSCRIBE ,可以同时订阅多个频道,用法是 SUBSCRIBE channel [channel ......] 执行该命令后客户端会进入订阅状态。
进入订阅状态后客户端可能受到3种类型的回复。每种类型的回复都包含3个值,第一个值是消息的类型,根据消息类型的不同,第二、三个值的含义也不同。消息类型可能的取值有以下3个。
subscribe。表示订阅成功的反馈信息。第二个值是订阅成功的频道名称,第三个值是当前客户端订阅的频道数量
message。表示接收到的消息。第二个值表示产生消息的频道名称,第三个值是消息的内容。
unsubscribe。表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量。
使用 UNSUBSCRIBE 命令可以取消订阅指定的频道,用法为 UNSUBSCRIBE [channel [channel ......]] ,如果不指定频道则会取消订阅所有频道。
5、按照规则订阅
除了可以使用 SUBSCRIBE 命令订阅指定名称的频道外,还可以使用 PSUBSCRIBE 命令订阅指定的规则。规则支持 glob 风格通配符格式。PSUBSCRIBE channel.?* channel.?* 可以匹配 channel.1.1 和 channel.1.10,但不会匹配 channel。
使用 PSUBSCRIBE 命令可以重复订阅一个频道(会收到两条消息)。
PUNSUBSCRIBE 命令可以退订指定的规则,用法是 PUNSUBSCRIBE [pattern [pattern ......]] ,如果没有参数则会退订所有规则(不会影响直接通过 SUBSCRIBE 命令订阅的频道)。
上一篇: 2018激励演讲稿
下一篇: 2018新年管理感言