首頁 > 資料庫 > Redis > 主體

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

王林
發布: 2023-05-26 18:55:28
轉載
909 人瀏覽過

先介紹一下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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!