redis發布訂閱者模型:
Redis提供了發布訂閱功能,可以用於消息的傳輸,Redis的發布訂閱機制包括三個部分,發布者,訂閱者和Channel。發布者和訂閱者都是Redis客戶端,Channel則為Redis服務器端,發布者將消息發送到某個的頻道,訂閱了這個頻道的訂閱者就能接收到這條消息。Redis的這種發布訂閱機制與基於主題的發布訂閱類似,Channel相當於主題。
發布者:
pub.py
import redis conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True) conn.publish("333", "18")
訂閱者:
sub.py
import redis conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True) # 第一步 生成一個訂閱者對象 pubsub = conn.pubsub() # 第二步 訂閱一個消息 pubsub.subscribe("gaoxin333") # 創建一個接收 while True: print("working~~~") msg = pubsub.parse_response() print(msg)
(1)發送消息
Redis采用PUBLISH命令發送消息,其返回值為接收到該消息的訂閱者的數量。
(2)訂閱某個頻道
Redis采用SUBSCRIBE命令訂閱某個頻道,其返回值包括客戶端訂閱的頻道,目前已訂閱的頻道數量,以及接收到的消息,其中subscribe表示已經成功訂閱了某個頻道。
(3)模式匹配
模式匹配功能允許客戶端訂閱符合某個模式的頻道,Redis采用PSUBSCRIBE訂閱符合某個模式所有頻道,用“”表示模式,“”可以被任意值代替。假設客戶端同時訂閱了某種模式和符合該模式的某個頻道,那么發送給這個頻道的消息將被客戶端接收到兩次,只不過這兩條消息的類型不同,一個是message類型,一個是pmessage類型,但其內容相同。
(4)取消訂閱
Redis采用UNSUBSCRIBE和PUNSUBSCRIBE命令取消訂閱,其返回值與訂閱類似。
由於Redis的訂閱操作是阻塞式的,因此一旦客戶端訂閱了某個頻道或模式,就將會一直處於訂閱狀態直到退出。在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,其返回值都包含了該客戶端當前訂閱的頻道和模式的數量,當這個數量變為0時,該客戶端會自動退出訂閱狀態。
import redis
conn = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
conn.publish("gaoxin333", "18")