第十八章 發布與訂閱

2022-06-15 14:24:14 字數 1018 閱讀 8695

通過subscribe命令,客戶端可以訂閱乙個或多個頻道,每當有其他客戶端向被訂閱的頻道傳送訊息,頻道的訂閱者都會收到訊息

通過psubscribe命令,客戶端可以訂閱乙個或多個模式,每當有其他客戶端向被訂閱的頻道傳送訊息,與該頻道相匹配的模式訂閱者也會收到

redisserver中用乙個字典儲存了所有頻道的訂閱關係,字典的鍵是頻道名,字典的值是乙個鍊錶,儲存了訂閱的客戶端

struct

redisserver

18.1.1 訂閱頻道

將頻道和對應的客戶端插入字典pubsub_channels中,若已有將新加入的客戶端放到煉表表尾

18.1.2 退訂頻道

在字典中找到對應的鍵,遍歷鍊錶刪除相應的客戶端,刪除之後成了空鍊錶,則刪除對應的鍵

redisserver中用乙個鍊錶儲存了所有模式的訂閱關係

struct

redisserver;

鍊錶的每個節點包含了乙個pubsubpattern結構

typedef struct

pubsubpatternpubsubpattern;

18.2.1 訂閱模式

客戶端執行psubscribe命令訂閱某個模式,伺服器會新建乙個pubsubpattern物件,插入到pubsub_patterns鍊錶的末尾

18.2.2 退訂模式

在pubsub_patterns中查到所屬的節點並刪除

客戶端執行publish

18.3.1 將訊息傳送給頻道訂閱者

從pubsub_channels字典中找到對應的鍵,取出值物件(乙個鍊錶),遍歷鍊錶,找到對應頻道下的所有訂閱者,將訊息傳送往這些訂閱者

18.3.2 將訊息傳送給模式訂閱者

查詢鍊錶,找出匹配模式的訂閱者,將訊息傳送給訂閱者

缺點:不持久化訊息,不保證客戶端一定接收到訊息

第十八章 B樹

施工中施工中 基本操作主要包括 搜尋b樹,建立空b樹,插入關鍵字。18.3放出刪除關鍵字的 class program region 磁碟操作 為結點初始化對應的磁碟頁 private static node t allocate node t 磁碟寫操作 private static void d...

第十八章 定製特性

目錄 18.1 使用定製特性 18.2 定義自己的特性類 18.3 特性構造器和字段 屬性資料型別 18.4 檢測定製特性 18.5 兩個特性例項的相互匹配 18.6 檢測定製特性時不建立從attribute派生的物件 18.7 條件特性類 定製特性 利用定製特性,可宣告式地為自己的 構造新增註解來...

第十八章 18 2 3節練習

練習18.18 已知遊俠面的swap的典型定義 參見13.3節,第457頁 當mem1是乙個string時程式使用swap的哪個版本?如果mem1是int呢?說明在這兩種情況下名字查詢的過程。void swap t v1,t v2 解答 這裡典型定義應該指的是有乙個專為string交換而建立的swa...