ホームページ > データベース > Redis > Redis をメッセージキューとして使用できますか?

Redis をメッセージキューとして使用できますか?

(*-*)浩
リリース: 2019-06-18 10:10:58
オリジナル
3604 人が閲覧しました

Redis はキャッシュ サーバーとしてだけでなく、メッセージ キューとしても使用できます。そのリスト タイプは本質的にメッセージ キューとしての使用をサポートしています。

Redis をメッセージキューとして使用できますか?

Redis リストは二重リンク リストを使用して実装され、先頭ノードと末尾ノードが保存されるため、両側に要素を挿入するのは非常に困難です。リストの一番早いです。 (推奨学習: Redis ビデオ チュートリアル )

したがって、lpush と rpop、または rpush と lpop という 2 つの簡単な命令だけで、Redis のリストを直接使用してメッセージ キューを実装できます。

しかし、メッセージ コンシューマには問題があります。つまり、リスト内に保留中のメッセージがあるかどうかを確認するために rpop メソッドを常に呼び出す必要があるということです。呼び出しごとに接続が開始されるため、不必要な無駄が発生します。おそらく、Thread.sleep() やその他のメソッドを使用して、一定期間後にコンシューマー スレッドが再び消費できるようにすることになるでしょうが、これには 2 つの問題があります。

1) プロデューサの速度がコンシューマの消費速度、メッセージ キューの長さは増加し続け、時間の経過とともに多くのメモリ領域を占有します。

2) スリープ時間が長すぎると、一部の時間に敏感なメッセージを処理できなくなります。スリープ時間が短すぎると、接続に比較的大きなオーバーヘッドが発生します。

したがって、brpop コマンドを使用できます。このコマンドは、要素がある場合にのみ返されます。要素がない場合は、タイムアウトで null が返されるまでブロックされます。その後、Customer を実行してコンソールをクリアできます。プログラムには出力がなく、ブロックされていることがわかります。brpop はここにあります。次に、Redis クライアントを開き、コマンド client list を入力して、現在 2 つの接続があることを確認します。

Redis は、メッセージ キューのサポートを提供することに加えて、パブリッシュ/サブスクライブ モードをサポートする一連のコマンドも提供します。

1) Publish

PUBLISH 命令を使用してメッセージを公開できます。形式は PUBLISH チャネル メッセージです。

戻り値は番号を示します。メッセージの購読者の数。

2) サブスクリプション

SUBSCRIBE 命令は、SUBSCRIBE チャネル形式のメッセージを受信するために使用されます。

SUBSCRIBE 命令を使用した後にサブスクリプション モードに入ったことがわかります。 、しかしパブリッシュは受信されませんでした。メッセージは、メッセージが送信されるまでサブスクリプションが受信しないためです。このモードの他のコマンドについては、応答のみが表示されます。

返信は 3 つのタイプに分類されます:

1. サブスクライブの場合、2 番目の値はサブスクライブされたチャネルを示し、3 番目の値はどのサブスクリプションであるかを示します。 Channel? (シリアル番号として理解されますか?)

2. メッセージの場合、2 番目の値はメッセージを生成したチャネル、3 番目の値はメッセージ

3 です。購読解除の場合、2 番目の値は購読解除されたチャネルを表し、3 番目の値は現在のクライアント サブスクリプション数を表します。

コマンド UNSUBSCRIBE を使用して購読を解除できます。パラメーターを追加しない場合、SUBSCRIBE コマンドによって購読されたすべてのチャネルが購読解除されます。

Redis は、コマンド PSUBSCRIBE (パターン サブスクライブ) を使用した、ワイルドカード ベースのメッセージ サブスクリプションもサポートしています。

パブリッシュ コマンドが 2 を返し、サブスクライバがメッセージを 2 回受信したことがわかります。これは、PSUBSCRIBE コマンドが繰り返しチャネルにサブスクライブできるためです。 PSUBSCRIBE コマンドを使用してサブスクライブされたチャネルは、PUNSUBSCRIBE コマンドを使用してサブスクライブ解除する必要もあります。このコマンドは、SUBSCRIBE によってサブスクライブされたチャネルからはサブスクライブ解除できません。同様に、UNSUBSCRIBE は、PSUBSCRIBE コマンドによってサブスクライブされたチャネルからサブスクライブ解除できません。同時に、PUNSUBSCRIBE 命令のワイルドカードは展開されません。

要約:

Redis の List データ構造を使用すると、メッセージ キューを簡単かつ迅速に作成できます。同時に、Redis が提供する BRPOP および BLPOP 命令は、 Jedis への頻繁な呼び出しの問題 rpop および lpop メソッドによって引き起こされるリソースの浪費。さらに、Redis はメッセージ パッシングやプロセス間通信を実現できるパブリッシュ/サブスクライブ モードの命令を提供します。

Redis 関連の技術記事の詳細については、「Redis データベース チュートリアルの使用方法の概要」 列にアクセスして学習してください。

以上がRedis をメッセージキューとして使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート