この質問は、Redis と一緒にZeroMQなどのメッセージング ソフトウェアを使用することについて、いくつかの言及 (この など) に出くわしたときに発生しますが、Redis 自体がメッセージング システムを使用しているという話をよく耳にします。では、Redis が他のメッセージング システムと一緒に使用される場合、Redis が単独でメッセージング システムとして使用される場合に深刻な欠陥があることを意味するのでしょうか?
キャッシングと pub/sub に Redis を使用することは明らかですが、JMS、AMQP、ZeroMQ などの本格的なメッセージング システムの代わりにRedis を使用できるかどうかは明確ではありません。
標準準拠の側面はそのままにして、機能/機能のみに集中すると、Redis はメッセージング システムに必要なすべてのメッセージング パターン/モデルをサポートしますか?
私が話しているメッセージングパターンは次のとおりです。
- RPC/Request-reply ( ActiveMQ/JMS を使用した例とRabbitMQ/AMQP を使用した例)
- パイプライン/ワーク キュー (各メッセージの最大 1 回の消費)
- 放送(チャンネル登録者全員)
- マルチキャスト (コンシューマーのセレクターに基づくサーバーでのメッセージのフィルタリング)
- 他のメッセージング パターンはありますか?
はいの場合、Redis は、キャッシングとメッセージングという 2 つの (おそらくそれ以上の) 側面を同時に解決しているようです。
Java/Java EE サーバーに支えられた Web アプリケーションのコンテキストでこれを見ています。私はこれを、概念実証の観点からではなく、大規模なソフトウェア開発の観点から見ています。
Edit1:
user:791406 が有効な質問をしました:
「redis がこれらのパターンをサポートしているかどうかなど、誰が気にしますか? redis は SLA と QoS のニーズを満たしますか?」
この詳細は、コメント セクションではなく、質問の一部として提供する方がよいと思いました。
私の現在のニーズは、SLA や QOS とはあまり関係がなく、将来、要件が (合理的に) 増大した場合でも使用できる、自分の仕事 (メッセージング) 用のツールを選択することに関係しています。最初は単純な要件から始めていますが、要件が大きくなる傾向があることは誰もが知っています。いいえ、私はそれをすべて行う 1 つのツールを探しているわけではありません。ActiveMQ/RabbitMQ のように、Redis がメッセージング システムから期待される通常の要件を満たしているかどうかを知りたいだけです。もちろん、私の SLA/QOS のニーズが極端で偏心している場合は、それを満たすための特別なツールを入手する必要があります。例: 場合によっては、特定の SLA 要件により、RabbitMQ よりも ZeroMQ を選択できます。私はそのような特別な要件について話しているのではありません。私は平均的な企業の要件に焦点を当てています。
redis は、今日のメッセージング ニーズの基本的なツールとして使用できますが、将来の実際のメッセージング ジョブには不適切なツールになる可能性があるのではないかと (私のわずかな理解に基づいて) 心配していました。私は ActiveMQ/RabbitMQ のようなメッセージング システムの経験があり、単純なものから (合理的に) 複雑なメッセージング ニーズに使用できることを知っています。
編集2:
redis の Web サイトには、「Redis はメッセージング サーバーとしてよく使用される」と記載されていますが、メッセージング パターンを実現する方法は明確ではありません。
Salvatore sanfilippo は、 Redis ユーザーは、Redis をデータベース、メッセージング バス、またはキャッシュとして使用する傾向があると述べています。それが「メッセージバス」としてどの程度機能するかは明らかではありません。
redis がサポートしていない JMS のメッセージング要件を見つけようとしていたときに、Redis はサポートしているが JMS がサポートしていないものに出くわしました。特定のパターンに一致するチャネル名。
結論:
メッセージングのニーズには JMS を使用し、キャッシングには Redis を使用することにしました。