Redis之旅--Redis 发布订阅(七)

一、发布订阅简介

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。

Redis之旅--Redis 发布订阅(七)_第1张图片
发布订阅

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。

发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

二、Redis发布订阅功能

  1. 发送消息
    Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。
C:\Users\Administrator>redis-cli
127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1
127.0.0.1:6379> PUBLISH redisChat "Learn redis"
(integer) 1
127.0.0.1:6379>
  1. 订阅某个频道
    Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。
C:\Users\Administrator>redis-cli
127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
Redis之旅--Redis 发布订阅(七)_第2张图片
Redis发布订阅功能

三、 Redis 发布订阅命令

序号 命令及描述
1 PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道。
2 PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态。
3 PUBLISH channel message
将信息发送到指定的频道。
4 PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道。
5 SUBSCRIBE channel [channel ...]
订阅给定的一个或多个频道的信息。
6 UNSUBSCRIBE [channel [channel ...]]
指退订给定的频道。

  1. Redis Psubscribe 命令
    Redis Psubscribe 命令订阅一个或多个符合给定模式的频道。
    每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。
    语法
    redis Psubscribe 命令基本语法如下:
redis 127.0.0.1:6379> PSUBSCRIBE pattern [pattern ...]
  1. Redis Pubsub 命令
    Redis Pubsub 命令用于查看订阅与发布系统状态,它由数个不同格式的子命令组成。
    语法
    redis Pubsub 命令基本语法如下:
redis 127.0.0.1:6379> PUBSUB  [argument [argument ...]]

返回值
由活跃频道组成的列表。
例:

127.0.0.1:6379> PUBSUB CHANNELS
1) "redisChat"

  1. Redis Publish 命令
    Redis Publish 命令用于将信息发送到指定的频道。
    语法
    redis Publish 命令基本语法如下:
redis 127.0.0.1:6379> PUBLISH channel message

返回值
接收到信息的订阅者数量。

127.0.0.1:6379> PUBLISH mychannel "hello, i m here"
(integer) 0
  1. Redis Punsubscribe 命令
    Redis Punsubscribe 命令用于退订所有给定模式的频道。

语法
redis Punsubscribe 命令基本语法如下:

redis 127.0.0.1:6379> PUNSUBSCRIBE [pattern [pattern ...]]

返回值
这个命令在不同的客户端中有不同的表现。

127.0.0.1:6379> PUNSUBSCRIBE redisChat
1) "punsubscribe"
2) "redisChat"
3) (integer) 0
  1. Redis Subscribe 命令
    Redis Subscribe 命令用于订阅给定的一个或多个频道的信息。。

语法
redis Subscribe 命令基本语法如下:

redis 127.0.0.1:6379> SUBSCRIBE channel [channel ...]
  1. Redis Unsubscribe 命令
    Redis Unsubscribe 命令用于退订给定的一个或多个频道的信息。
    指示客户端退订给定的频道。
    如果没有频道被指定,也即是,一个无参数的 UNSUBSCRIBE 调用被执行,那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。在这种情况下,命令会返回一个信息,告知客户端所有被退订的频道。

语法
redis Unsubscribe 命令基本语法如下:

redis 127.0.0.1:6379> UNSUBSCRIBE channel [channel ...]

127.0.0.1:6379> UNSUBSCRIBE redisChat
1) "unsubscribe"
2) "redisChat"
3) (integer) 0

返回值
这个命令在不同的客户端中有不同的表现。

四、取消订阅

Redis采用UNSUBSCRIBE和PUNSUBSCRIBE命令取消订阅,其返回值与订阅类似。
由于Redis的订阅操作是阻塞式的,因此一旦客户端订阅了某个频道或模式,就将会一直处于订阅状态直到退出。在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,其返回值都包含了该客户端当前订阅的频道和模式的数量,当这个数量变为0时,该客户端会自动退出订阅状态。

五、Redis发布订阅与ActiveMQ的比较:

(1)ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持;
(2)ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失;
(3)ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。
总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。

你可能感兴趣的:(Redis之旅--Redis 发布订阅(七))