# PUBSUB
**PUBSUB <subcommand> [argument [argument ...]]**
[_PUBSUB_](#pubsub) 是一個查看訂閱與發布系統狀態的內省命令, 它由數個不同格式的子命令組成, 以下將分別對這些子命令進行介紹。
**可用版本:** >= 2.8.0
## PUBSUB CHANNELS [pattern]
列出當前的活躍頻道。
活躍頻道指的是那些至少有一個訂閱者的頻道, 訂閱模式的客戶端不計算在內。
`pattern` 參數是可選的:
* 如果不給出 `pattern` 參數,那么列出訂閱與發布系統中的所有活躍頻道。
* 如果給出 `pattern` 參數,那么只列出和給定模式 `pattern` 相匹配的那些活躍頻道。
**復雜度:** O(N) , `N` 為活躍頻道的數量(對于長度較短的頻道和模式來說,將進行模式匹配的復雜度視為常數)。
**返回值:** 一個由活躍頻道組成的列表。
```
# client-1 訂閱 news.it 和 news.sport 兩個頻道
client-1> SUBSCRIBE news.it news.sport
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.sport"
3) (integer) 2
# client-2 訂閱 news.it 和 news.internet 兩個頻道
client-2> SUBSCRIBE news.it news.internet
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.internet"
3) (integer) 2
# 首先, client-3 打印所有活躍頻道
# 注意,即使一個頻道有多個訂閱者,它也只輸出一次,比如 news.it
client-3> PUBSUB CHANNELS
1) "news.sport"
2) "news.internet"
3) "news.it"
# 接下來, client-3 打印那些與模式 news.i* 相匹配的活躍頻道
# 因為 news.sport 不匹配 news.i* ,所以它沒有被打印
redis> PUBSUB CHANNELS news.i*
1) "news.internet"
2) "news.it"
```
## PUBSUB NUMSUB [channel-1 ... channel-N]
返回給定頻道的訂閱者數量, 訂閱模式的客戶端不計算在內。
**復雜度:** O(N) , `N` 為給定頻道的數量。
**返回值:** 一個多條批量回復(Multi-bulk reply),回復中包含給定的頻道,以及頻道的訂閱者數量。 格式為:頻道 `channel-1` , `channel-1` 的訂閱者數量,頻道 `channel-2` , `channel-2` 的訂閱者數量,諸如此類。 回復中頻道的排列順序和執行命令時給定頻道的排列順序一致。 不給定任何頻道而直接調用這個命令也是可以的, 在這種情況下, 命令只返回一個空列表。
```
# client-1 訂閱 news.it 和 news.sport 兩個頻道
client-1> SUBSCRIBE news.it news.sport
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.sport"
3) (integer) 2
# client-2 訂閱 news.it 和 news.internet 兩個頻道
client-2> SUBSCRIBE news.it news.internet
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news.it"
3) (integer) 1
1) "subscribe"
2) "news.internet"
3) (integer) 2
# client-3 打印各個頻道的訂閱者數量
client-3> PUBSUB NUMSUB news.it news.internet news.sport news.music
1) "news.it" # 頻道
2) "2" # 訂閱該頻道的客戶端數量
3) "news.internet"
4) "1"
5) "news.sport"
6) "1"
7) "news.music" # 沒有任何訂閱者
8) "0"
```
## PUBSUB NUMPAT
返回訂閱模式的數量。
注意, 這個命令返回的不是訂閱模式的客戶端的數量, 而是客戶端訂閱的所有模式的數量總和。
**復雜度:** O(1) 。
**返回值:** 一個整數回復(Integer reply)。
```
# client-1 訂閱 news.* 和 discount.* 兩個模式
client-1> PSUBSCRIBE news.* discount.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
1) "psubscribe"
2) "discount.*"
3) (integer) 2
# client-2 訂閱 tweet.* 一個模式
client-2> PSUBSCRIBE tweet.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "tweet.*"
3) (integer) 1
# client-3 返回當前訂閱模式的數量為 3
client-3> PUBSUB NUMPAT
(integer) 3
# 注意,當有多個客戶端訂閱相同的模式時,相同的訂閱也被計算在 PUBSUB NUMPAT 之內
# 比如說,再新建一個客戶端 client-4 ,讓它也訂閱 news.* 頻道
client-4> PSUBSCRIBE news.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1
# 這時再計算被訂閱模式的數量,就會得到數量為 4
client-3> PUBSUB NUMPAT
(integer) 4
```
- Redis 文檔
- 鍵空間通知(keyspace notification)
- 事務(transaction)
- 發布與訂閱(pub/sub)
- 復制(Replication)
- 通信協議(protocol)
- 持久化(persistence)
- Sentinel
- 集群教程
- Redis 集群規范
- Redis 命令參考
- Key(鍵)
- DEL
- DUMP
- EXISTS
- EXPIRE
- EXPIREAT
- KEYS
- MIGRATE
- MOVE
- OBJECT
- PERSIST
- PEXPIRE
- PEXPIREAT
- PTTL
- RANDOMKEY
- RENAME
- RENAMENX
- RESTORE
- SORT
- TYPE
- SCAN
- String(字符串)
- APPEND
- BITCOUNT
- BITOP
- DECR
- DECRBY
- GET
- GETBIT
- GETRANGE
- GETSET
- INCR
- INCRBY
- INCRBYFLOAT
- MGET
- MSET
- MSETNX
- PSETEX
- SET
- SETBIT
- SETEX
- SETNX
- SETRANGE
- STRLEN
- Hash(哈希表)
- HDEL
- HEXISTS
- HGET
- HGETALL
- HINCRBY
- HINCRBYFLOAT
- HKEYS
- HLEN
- HMGET
- HMSET
- HSET
- HSETNX
- HVALS
- HSCAN
- List(列表)
- BLPOP
- BRPOP
- BRPOPLPUSH
- LINDEX
- LINSERT
- LLEN
- LPOP
- LPUSH
- LRANGE
- LREM
- LSET
- LTRIM
- RPOP
- RPOPLPUSH
- RPUSH
- RPUSHX
- Set(集合)
- SADD
- SCARD
- SDIFF
- SDIFFSTORE
- SINTER
- SINTER
- SINTERSTORE
- SISMEMBER
- SMEMBERS
- SMOVE
- SPOP
- SRANDMEMBER
- SREM
- SUNION
- SUNIONSTORE
- SSCAN
- SortedSet(有序集合)
- ZADD
- ZCARD
- ZCOUNT
- ZINCRBY
- ZRANGE
- ZRANGEBYSCORE
- ZRANK
- ZREM
- ZREMRANGEBYRANK
- ZREMRANGEBYSCORE
- ZREVRANGE
- ZREVRANGEBYSCORE
- ZREVRANK
- ZSCORE
- ZUNIONSTORE
- ZINTERSTORE
- ZSCAN
- Pub/Sub(發布/訂閱)
- PSUBSCRIBE
- PUBLISH
- PUBSUB
- PUNSUBSCRIBE
- SUBSCRIBE
- UNSUBSCRIBE
- Transaction(事務)
- DISCARD
- EXEC
- MULTI
- UNWATCH
- WATCH
- Script(腳本)
- EVAL
- EVALSHA
- SCRIPT EXISTS
- SCRIPT FLUSH
- SCRIPT KILL
- SCRIPT LOAD
- Connection(連接)
- AUTH
- ECHO
- PING
- QUIT
- SELECT
- Server(服務器)
- BGREWRITEAOF
- BGSAVE
- CLIENT GETNAME
- CLIENT KILL
- CLIENT LIST
- CLIENT SETNAME
- CONFIG GET
- CONFIG RESETSTAT
- CONFIG REWRITE
- CONFIG SET
- DBSIZE
- DEBUG OBJECT
- DEBUG SEGFAULT
- FLUSHALL
- FLUSHDB
- INFO
- LASTSAVE
- MONITOR
- PSYNC
- SAVE
- SHUTDOWN
- SLAVEOF
- SLOWLOG
- SYNC
- TIME
- 關于