(Redis設計與實現-6) 頻道的訂閱與退訂

一.訂閱頻道redis

每當客戶端執行 SUBSCRIBE 命令,訂閱某個或某些頻道的時候,服務器都會將客戶端與被訂閱的頻道在 redisServer.pubsub_channels 字典中進行關聯。

圖片描述

a.若是頻道已經有其餘訂閱者, 那麼它在 pubsub_channels 字典中必然有相應的訂閱者鏈表, 程序惟一要作的就是將
客戶端添加到訂閱者鏈表的末尾。

b.若是頻道還未有任何訂閱者, 那麼它必然不存在於 pubsub_channels 字典, 程序首先要在 pubsub_channels 字典中
爲頻道建立一個鍵, 並將這個鍵的值設置爲空鏈表, 而後再將客戶端添加到鏈表, 成爲鏈表的第一個元素。


二.退訂頻道服務器

UNSUBSCRIBE 命令的行爲和 SUBSCRIBE 命令的行爲正好相反,當一個客戶端退訂某個或某些頻道的時候,服務器將從 redisServer.pubsub_channels 中解除客戶端與被退訂頻道之間的關聯

圖片描述

圖片描述

a.程序會根據被退訂頻道的名字,在 pubsub_channels 字典中找到頻道對應的訂閱者鏈表,而後從訂閱者鏈表中刪除
退訂客戶端的信息。

b.若是刪除退訂客戶端以後,頻道的訂閱者鏈表變成了空鏈表,那麼說明這個頻道已經沒有任何訂閱者了,程序將從 
pubsub_channels 字典中刪除頻道對應的鍵。
相關文章
相關標籤/搜索