11 Redis發布訂閱

2021-10-10 01:16:51 字數 1535 閱讀 4854

redis 客戶端可以訂閱任意數量的頻道。

第乙個:訊息傳送者, 第二個:頻道 第三個:訊息訂閱者!

下圖展示了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關係:

當有新訊息通過 publish 命令傳送給頻道 channel1 時, 這個訊息就會被傳送給訂閱它的三個客戶端:

訂閱端:

# 訂閱qwe這個頻道

127.0.0.1:6379> subscribe qwe

reading messages... (press ctrl-c to quit)

1)"subscribe"

2)"qwe"

3)(integer) 1

# 等待讀取推送資訊

# 訊息

1)"message"

# 哪個頻道

2)"qwe"

# 訊息內容

3)"hello,qwe,test1"

1)"message"

2)"qwe"

3)"hello,qwe,test2"

傳送端:

# 發布者傳送資訊到頻道

127.0.0.1:6379> publish qwe "hello,qwe,test1"

(integer) 1

127.0.0.1:6379> publish qwe "hello,qwe,test2"

(integer) 1

redis是使用c實現的,通過分析 redis 原始碼裡的 pubsub.c 檔案,了解發布和訂閱機制的底層實現。

通過 subscribe 命令訂閱某頻道後,redis-server 裡維護了乙個字典,字典的鍵就是乙個個 頻道!,而字典的值則是乙個鍊錶,鍊錶中儲存了所有訂閱這個 channel 的客戶端。subscribe 命令的關鍵,就是將客戶端新增到給定 channel 的訂閱鍊錶中。

通過 publish 命令向訂閱者傳送訊息,redis-server 會使用給定的頻道作為鍵,在它所維護的 channel字典中查詢記錄了訂閱這個頻道的所有客戶端的鍊錶,遍歷這個鍊錶,將訊息發布給所有訂閱者。

使用場景:

實時訊息系統

實時聊天(頻道當做聊天室,將資訊回顯給所有人即可)

訂閱、關注系統

稍微複雜的場景還是最好使用訊息中介軟體來實現

11 Redis 集合物件

本文內容均來自 redis設計與實現 一書 集合物件的編碼可以是intset或者hashtable。intset編碼的集合物件使用整數集合作為底層實現,集合物件包含的所有元素都被儲存在整數集合裡面。hashtable編碼的集合物件使用字典作為底層實現,字典的每個鍵都是乙個字串物件,每個字串物件包含了...

Redis 發布訂閱

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關係 當有新訊息通過 pu...

Redis 發布訂閱

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 publish 傳送訊息,訂閱者 subscribe 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖是 頻道 channel1 以及訂閱這個頻道的三個客戶端 client1 client2和 client3 當有新訊息通過 ...