Python操作Redis之訂閱與發布__Python

來源:互聯網
上載者:User

訂閱者可以訂閱一個或多個頻道,發行者向一個頻道發送訊息後,所有訂閱這個頻道的訂閱者都將收到訊息,而發行者也將收到一個數值,這個數值是收到訊息的訂閱者的數量。訂閱者只能收到自它開始訂閱後發行者所發布的訊息,之前發布的訊息呢,就不可能收到了。

下面,先給出訂閱端的代碼

# coding=utf-8'''Created on 2015-9-9@author: kwsy'''import redispool=redis.ConnectionPool(host='192.168.1.149',port=6379,db=1)r = redis.StrictRedis(connection_pool=pool)p = r.pubsub()p.subscribe('excelFile')for item in p.listen():        print item    if item['type'] == 'message':          data =item['data']         r.set('s',32)        print data        if item['data']=='over':            break;p.unsubscribe('spub')print '取消訂閱'


運行時,要注意檢查type,一旦listen,就會收到一個訊息,但不是發行者的訊息,而是系統發來的,內容為{'pattern': None, 'type': 'subscribe', 'channel': 'spub', 'data': 1L},這個的意思是說,你訂閱成功了,頻道是spub,當前,有一個訂閱使用者。

再來看發布端的代碼

# coding=utf-8'''Created on 2015-9-9@author: Administrator'''import redispool=redis.ConnectionPool(host='192.168.1.142',port=6379,db=0)r = redis.StrictRedis(connection_pool=pool)while True:    input = raw_input("publish:")    if input == 'over':        print '停止發布'        break;    r.publish('spub', input)
rwa_input接收使用者輸入的資料發布到頻道中,訂閱端收到後列印資料

這裡有一個小情況要指明,實際運行中,如果你輸入的是漢子,那麼列印出來的可能是亂碼,但其實呢,並不是真的編程亂碼了,而是當你採用cmd命令視窗運行時,cmd命令視窗有自己的編碼格式,所以才會看著亂碼,如果用eclipse運行,就不會這樣了。

還有一點要注意,如果你使用Redis-cli,也就是redis的客訂閱了一個頻道,那麼訂閱後,你無法進行除subscribe,unsubscribe,psubscribe,punsubscribe這四個命令意外的其他任何命令。我在訂閱代碼中放了一行r.set('s',32),執行過程中,這句話是被執行了的,也就是說,當我們用程式設計語言操作redis時,訂閱後,我們仍然可以使用其他命令,因此,剛才所說的有關命令的限制只是針對redis自己的用戶端而言。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.