Python でサブパブリッシュメカニズムを使用して Redis サブスクリプションとパブリッシュを実装する方法

王林
リリース: 2023-05-26 18:55:28
転載
909 人が閲覧しました

まず、redis の pub/sub 機能を紹介します。

Pub/Sub 機能は、Publish and Subscribe の略で、パブリッシュとサブスクライブの機能を指します。イベント ベースのシステムでは、Pub/Sub は現在広く使用されている通信モデルであり、基本的な通信メカニズムとしてイベントを使用して、大規模システムに必要な疎結合対話モデルを提供します。サブスクライバ (クライアントなど) がイベントをサブスクライブします。メソッドは、受信したいイベントまたはイベントの種類を表現します。パブリッシャ (サーバーなど) は、サブスクライバが関心のあるイベントを、関連するサブスクライバにいつでも通知できます。

平たく言えば、サブ側 (サブスクライバー) が常にリッスンしていることを意味します。パブリッシャー側 (パブリッシャー) がメッセージをパブリッシュすると、私はそれを受信します。たとえば、最初にパブリッシャー:

#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']
ログイン後にコピー

データ構造、つまり項目に関しては、次のようになります: {'pattern': None, 'type': 'message ', 'channel' : 'liao', 'data': '300033 1'} したがって、チャネルを使用してメッセージがどのキューに属しているかを判断できます。 (プログラムを実行するときは、最初にサブスクライバーを実行し、次にパブリッシャー プログラムを実行します)

要約すると、主なポイントは 2 つあります。

  • 1 つ目は接続です。方法。 Python を使用して Redis に接続するには 3 つの方法があります: ① ライブラリの Redis クラス (またはほぼ同じ StrictRedis クラス) を使用する; ② ConnectionPool 接続プールを使用する (長時間の接続を維持できる); ③ Sentinel クラス (複数の Redis クラスターがある場合、プログラム自体が適切な接続を選択します)。

  • #2 つ目はサブスクリプション方式です。ここでは、StrictRedis クラスの pubsub メソッドが使用されます。 Redis メッセージをサブスクライブする方法は、接続が成功した後に開始される submit または psubscribe メソッドを使用することです。 subscribe が 1 つのチャネルをサブスクライブするのに対し、psubscribe は複数のチャネルをサブスクライブできます (このように記述する場合、パラメータとしてのチャネルはリストである必要があります)。その後、監視を開始できます。

以上がPython でサブパブリッシュメカニズムを使用して Redis サブスクリプションとパブリッシュを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!