首頁 >資料庫 >Redis >python中sub-pub機制怎麼實現Redis的訂閱與發布

python中sub-pub機制怎麼實現Redis的訂閱與發布

王林
王林轉載
2023-05-26 18:55:28948瀏覽

先介紹一下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連接redis有三種方式:①使用庫中的Redis類(或StrictRedis類,其實差不多);②使用ConnectionPool連接池(可保持長連接);③使用Sentinel類(如果有多個redis做集群時,程式會自己選擇一個合適的連接)。

  • 二是訂閱方法。這裡使用的是StrictRedis類別中的pubsub方法。訂閱redis訊息的方式是使用subscribe或psubscribe方法,在連線成功後開始使用。其中subscribe是訂閱一個頻道,psubscribe可訂閱多個頻道(這樣寫的時候,作為參數的頻道應該是一個清單)。之後就可以開始監聽了。

  • #

以上是python中sub-pub機制怎麼實現Redis的訂閱與發布的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除