Python 3学習(二十七):pythonはRedisの購読と配布を実現する(sub-pubメカニズム)

1969 ワード

まずredisのpub/sub機能を紹介します.
Pub/sub機能(means Publish,Subscribe)は、パブリッシュおよびサブスクリプション機能です.イベントベースのシステムでは、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':'300331'}のようなものなので、channelでこのメッセージがどのキューに属しているかを判断することができます.(プログラムを実行するときは、まずサブスクライバを実行し、パブリッシャプログラムを実行する)
まとめると、ポイントは2つあります.
  • は接続方式である.pythonを使用してredisに接続するには、1ライブラリ内のRedisクラス(またはStrictRedisクラス、実際には差が少ない)を使用する方法と、3つの方法があります.②ConnectionPool接続プール(長接続可能)を使用する.③Centinelクラスを使用する(複数のredisがクラスタ化されている場合、プログラムは自分で適切な接続を選択する).
  • は購読方法です.ここではStrictRedisクラスにおけるpubsubメソッドを用いる.接続が完了したら、subscribeまたはpsubsscribeメソッドを使用してredisメッセージを購読できます.ここでsubscribeは1つのチャンネルを購読し、psubscribeは複数のチャンネルを購読することができる(このように書く場合、パラメータとしてのチャンネルはリストであるべきである).その後、傍受を開始することができます.