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

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

王林
王林転載
2023-05-26 18:55:28943ブラウズ

まず、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 までご連絡ください。