Message Queue (メッセージ キュー) は、並行システムにおけるリソースの一貫性の問題を解決し、ピーク処理能力を向上させ、メッセージの順序性、回復可能性、配信の必須性を確保するためによく使用されます。アプリケーションを分離したり、非同期通信を実装したりするなど。 (推奨される学習: Redis ビデオ チュートリアル )
市場には多くの MQ アプリケーション (例: Kafka、RabbitMQ、Disque) があり、これらは以下に基づいて実装することもできます。より一般的な Redis ソリューションには以下が含まれます:
List に基づく LPUSH BRPOP の実装
PUB/SUB、サブスクリプション/パブリッシング モード
Sorted に基づく実装-Set
ストリーム タイプに基づく実装
##メッセージ キューの使用には、プロデューサーとコンシューマーが存在します。プロデューサはメッセージの生成を担当し、コンシューマはメッセージの処理を担当します。 プロダクションとは、メッセージをメッセージ キューに入れることを指します。 消費とは、メッセージの読み取りと処理を指します。通常、メッセージが消費された後は、メッセージ キューから削除する必要があります。List に基づく LPUSH BRPOP の実装
一般的なコマンドは次のとおりです:
LPUSH,将消息队列 BRPOP,从队列中取出消息,阻塞模式
このモデルには多くの利点があります:
シンプルな実装Reids は永続的なメッセージをサポートしています。つまり、メッセージは失われず、繰り返し表示できます。 (LRANGE クラスの命令を消費するのではなく、ただ見て使用するだけであることに注意してください)。 順序を確保でき、LPUSH コマンドを使用してメッセージの順序を確保できます。 RPUSH を使用すると、メッセージをキューの先頭に配置して、メッセージに優先順位を付け、シンプルなメッセージを実現することを目的としたプライオリティキュー。同時に、いくつかの欠点もあります。
消費確認 ACK を行うのがより面倒です。つまり、消費者が消費確認 ACK を受け取るという保証はありません。読み取り後に未処理のダウンタイムの問題。予期しないメッセージの損失が発生します。通常、メッセージが確実に処理され確認されるように、保留リストを自分で管理する必要があります。 一般的なパブリッシュ/ディスクリプト モードなどのブロードキャスト モードは実行できません。 繰り返し利用できません。一度消費すると削除されます。グループ利用はサポートされていません。ビジネス ロジック レイヤーで自分で解決する必要があります。PUB /SUB、サブスクリプション/パブリッシング パターン
SUBSCRIBE,用于订阅信道 PUBLISH,向信道发送消息 UNSUBSCRIBE,取消订阅
一般的な利点は次のとおりです。
一般的なブロードキャスト モード、メッセージを複数の消費者に公開できますマルチチャネル サブスクリプション、消費者が購読できる複数のタイプのメッセージを同時に受信するための複数のチャネルメッセージはすぐに送信されます。メッセージはコンシューマが読むのを待つ必要はありません。コンシューマはチャネルによって発行されたメッセージを自動的に受信します
デメリットもいくつかあります:
メッセージが公開されると、受信できなくなります。つまり、公開時にクライアントがオンラインでない場合、メッセージは失われ、取得できなくなります。各コンシューマが受信した時間が一貫しているという保証はありませんメッセージがコンシューマ クライアントに表示される バックログはある程度まで強制的に切断され、予期しないメッセージの損失が発生します。これは通常、メッセージの生成速度が消費速度よりもはるかに速い場合に発生します。Pub/Sub モードはメッセージ ストレージやメッセージ バックログ サービスには適していませんが、ブロードキャスト、インスタント メッセージの処理には適していることがわかります。メッセージング、インスタント フィードバック サービス。SortedSet 順序セットに基づく実装
ZADD KEY score member,压入集合 ZRANGEBYSCORE,依据score获取成员
ストリーム タイプに基づいた実装
このストリーム型redisはメッセージキューを実装するためのものです。メッセージ ID の自動生成、グループ消費、ACK、メッセージ転送、キュー監視などのコア メッセージ キュー機能をサポートします。Redis 関連の技術記事の詳細については、Redis 入門チュートリアルをご覧ください。 学べるコラム!
以上がRedisに基づいてメッセージキューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。