先介紹一下redis的pub/sub功能:
The Pub/Sub feature, which stands for Publish and Subscribe, refers to the functionality of publishing and subscribing.。在基於事件的系統中,Pub/Sub是目前廣泛使用的通信模型,它採用事件作為基本的通信機制,提供大規模系統所要求的鬆散耦合的交互模式:訂閱者(如客戶端)以事件訂閱的方式表達出它有興趣接收的一個事件或一類事件;發布者(如伺服器)可將訂閱者感興趣的事件隨時通知相關訂閱者。
通俗來講,就是說我sub端(訂閱者)一直監聽著,一旦pub端(發布者)發布了消息,那麼我就接收過來,舉個例子,先是發布者:
#coding:utf-8 import time import redis number_list = ['300033', '300032', '300031', '300030'] signal = ['1', '-1', '1', '-1'] rc = redis.StrictRedis(host='***', port='6379', db=3, password='********') for i in range(len(number_list)): value_new = str(number_list[i]) + ' ' + str(signal[i]) rc.publish("liao", value_new) #发布消息到liao
接著我們來看看訂閱者:
#coding:utf-8 import time import redis rc = redis.StrictRedis(host='****', port='6379', db=3, password='******') ps = rc.pubsub() ps.subscribe('liao') #从liao订阅消息 for item in ps.listen(): #监听状态:有消息发布了就拿过来 if item['type'] == 'message': print item['channel'] print item['data']
關於資料結構,也就是item,是類似於:{'pattern': None, 'type': 'message', 'channel' : 'liao', 'data': '300033 1'}這樣的,所以可以用channel來判斷這個訊息是屬於哪一個佇列裡的。 (執行程式的時候,先執行訂閱者,在執行發布者程式)
總結,重點有兩個:
以上是python中sub-pub機制怎麼實現Redis的訂閱與發布的詳細內容。更多資訊請關注PHP中文網其他相關文章!