PUBSUB命令是Redis 2.8新增加的命令之一,客戶端可以通過這個命令來查看頻道或者模式的相關資訊,比如某個頻道目前有多少訂閱者,又或者某個模式目前有多少訂閱者,諸如此類,
- PUBSUB命令是Redis 2.8新增加的命令之一,客戶端可以通過這個命令來查看頻道或者模式的相關資訊,比如某個頻道目前有多少訂閱者,又或者某個模式目前有多少訂閱者,諸如此類
- 下面將分別介紹PUBSUB命令的三個子命令,以及這些子命令的實作原理
一、PUBSUB CHANNELS命令
功能:用于回傳服務器當前被訂閱的頻道
- 命令格式如下:
PUBSUB CHANNELS [pattern]
其中pattern引數是可選的:
- 如果不給定pattern引數,那么命令回傳服務器當前被訂閱的所有頻道
- 如果給定pattern引數,那么命令回傳服務器當前被訂閱的頻道中那些與pattern模式相匹配的頻道
命令的實作
- 這個子命令是通過遍歷服務器pubsub_channels字典的所有鍵(每個鍵都是一個被訂閱的
頻道),然后記錄并回傳所有符合條件的頻道來實作的
這個程序可以用以下偽代碼來描述:
def pubsub_channels(pattern=None):
# 一個串列,用于記錄所有符合條件的頻道
channel_list = []
# 遍歷服務器中的所有頻道
# (也即是pubsub_channels 字典的所有鍵)
for channel in server.pubsub_channels:
# 當以下兩個條件的任意一個滿足時,將頻道添加到鏈表里面:
#1 )用戶沒有指定pattern 引數
#2 )用戶指定了pattern 引數,并且channel 和pattern 匹配
if (pattern is None) or match(channel, pattern):
channel_list.append(channel)
#向客戶端回傳頻道串列
return channel_list
演示案例
舉個例子,對于上圖所示的pubsub_channels字典來說,執行PUBSUB CHANNELS命令將回傳服務器目前被訂閱的四個頻道:
另一方面,執行PUBSUB CHANNELS"news.[is]"命令將回傳"news.it"和"news.sport"兩個 頻道,因為只有這兩個頻道和"news.[is]"模式相匹配:
二、PUBSUB NUMSUB命令v
功能: 接受任意多個頻道作為輸入 引數,并回傳這些頻道的訂閱者數量
命令格式如下:
PUBSUB NUMSUB [channel-1 channel-2...channel-n]
命令的實作
- 這個子命令是通過在pubsub_channels字典中找到頻道對應的訂閱者鏈表,然后回傳訂閱 者鏈表的長度來實作的(訂閱者鏈表的長度就是頻道訂閱者的數量) 這個程序可以用以下 偽代碼來描述:
# 遍歷輸入的所有頻道 for channel in all_input_channels: # 如果pubsub_channels 字典中沒有channel 這個鍵 # 那么說明channel 頻道沒有任何訂閱者 if channel not in server.pubsub_channels: # 回傳頻道名 reply_channel_name(channel) # 訂閱者數量為0 reply_subscribe_count(0) # 如果pubsub_channels 字典中存在channel 鍵 # 那么說明channel 頻道至少有一個訂閱者 else: # 回傳頻道名 reply_channel_name(channel) # 訂閱者鏈表的長度就是訂閱者數量 reply_subscribe_count(len(server.pubsub_channels[channel]) ```
三、PUBSUB NUMPAT命令
功能: 用于回傳服務器當前被訂閱模式的數量
命令格式如下:
PUBSUB NUMPAT
命令的實作
- 這個子命令是通過回傳pubsub_patterns鏈表的長度來實作的,因為這個鏈表的長度就是 服務器被訂閱模式的數量
- 這個程序可以用以下偽代碼來描述:
# pubsub_patterns 鏈表的長度就是被訂閱模式的數量 reply_pattern_count(len(server.pubsub_patterns)) ```
演示案例
- 舉個例子,對于下圖所示的pubsub_patterns鏈表來說,執行PUBSUB NUMPAT命令將回傳3:
- 而對于下圖所示的pubsub_patterns鏈表來說,執行PUBSUB NUMPAT命令將回傳1:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/208442.html
標籤:其他
上一篇:MySQL約束與設計
下一篇:SQL陳述句實作水仙花數求取







