首页 > 代码库 > Redis学习笔记07Redis命令之(6) 发布订阅

Redis学习笔记07Redis命令之(6) 发布订阅

1.1.1. subscribe

订阅一个或多个频道。当所订阅的频道上发布了消息时,本客户端连接将收到这个消息。

 

redis.coe2coe.me:6379> subscribe abc

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "abc"

3) (integer) 1

成功订阅了一个频道。

 

也可以一次订阅多个频道:

redis.coe2coe.me:6379> subscribe abc 123 456

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "abc"

3) (integer) 1

1) "subscribe"

2) "123"

3) (integer) 2

1) "subscribe"

2) "456"

3) (integer) 3

成功订阅了3个频道。

 

1.1.2. publish

 

发布消息到指定的频道。

redis.coe2coe.me:6379> publish abc hello

(integer) 0

 

返回值0表示此时没有客户端连接订阅这个频道。即使之后有客户端连接订阅了这个频道,也不会再收到这次发布的消息。必须先订阅,再发布。

 

redis.coe2coe.me:6379> publish abc "hello,redis"

(integer) 3

返回值3表示有三个客户端连接订阅了这个频道,并且接收到了这个消息。

 

此时,订阅了这个频道的客户端连接将收到这个消息:

redis.coe2coe.me:6379> subscribe abc

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "abc"

3) (integer) 1

在发布消息hello,redis之前,已经订阅了这个频道abc

 

1) "message"

2) "abc"

3) "hello,redis"

收到了本次发布的消息:hello,redis

 

 

1.1.3. unsubscribe

取消对指定频道的订阅。

两种方式:

(1)取消对所有频道的订阅。

unsubscribe

 

(2)取消对指定频道的订阅。

unsubscribe abc

 

1.1.4. psubscribe

支持模糊匹配的订阅,频道名称可以使用模糊匹配。

 

redis.coe2coe.me:6379> psubscribe  a*

Reading messages... (press Ctrl-C to quit)

1) "psubscribe"

2) "a*"

3) (integer) 1

 

订阅所有频道名称以a开头的频道。

 

 

1.1.5. punsubscribe

支持模糊匹配的取消订阅。

redis.coe2coe.me:6379> punsubscribe a*

1) "punsubscribe"

2) "a*"

3) (integer) 0

 

 

1.1.6. pubsub channels

查看频道列表,包括订阅的频道,或者发布的频道。

redis.coe2coe.me:6379> pubsub channels

1) "456"

2) "123"

3) "abc"

 

支持频道名的模糊匹配:

redis.coe2coe.me:6379> pubsub channels a*

1) "abc"

 

1.1.7. pubsub numsub

 

查询频道的订阅者的数量。

 

redis.coe2coe.me:6379> pubsub numsub abc 123

1) "abc"

2) (integer) 2

3) "123"

4) (integer) 1

发现频道abc2个订阅者,频道1231个订阅者。

 

 

当不指定频道名称时,返回空集合。

redis.coe2coe.me:6379> pubsub numsub

(empty list or set)

 

 

pubsub numsub abc返回的结果不包括使用psubscribe ab* 订阅的订阅者,尽管该订阅者也能收到abc频道上发布的消息。

 

 

1.1.8. pubsub numpat

查看采用psubscribe订阅的订阅者数量,不包括使用subscribe订阅的订阅者。

 

redis.coe2coe.me:6379> pubsub numpat

(integer) 1

 

此命令不支持指定频道名称。

redis.coe2coe.me:6379> pubsub numpat abc

(error) ERR Unknown PUBSUB subcommand or wrong number of arguments for ‘numpat‘

 

redis.coe2coe.me:6379> pubsub numpat ab*

(error) ERR Unknown PUBSUB subcommand or wrong number of arguments for ‘numpat‘

Redis学习笔记07Redis命令之(6) 发布订阅