データストレージ
Pub / Subはパブリッシャー/サブスクライバープラットフォームであり、データストレージではありません。サブスクライバーがいるかどうかに関係なく、公開されたメッセージは蒸発します。
Redis Streamsでは、streamはデータ型であり、それ自体がデータ構造です。メッセージまたはエントリはメモリに保存され、削除するように命令されるまでそこにとどまります。
同期/非同期通信(プッシュ/プル)
Pub / Subは同期通信です(プッシュ プロトコル)。通信できるようにするには、すべての関係者が同時にアクティブである必要があります。ここで、Redisは純粋な同期メッセージングブローカーです。
Redisストリームでは、両方の同期(XREAD
BLOCK
を使用 と特別な$
IDはプッシュです プロトコル)および非同期通信(通常のXREAD
プルです プロトコル)。 XREAD
BLOCK
を使用 Pub / Subに似ていますが、メッセージを失うことなく切断時に再開する機能があります。
配信セマンティクス
Pub / Subは、せいぜい1回、つまり「ファイアアンドフォーゲット」です。
Redis Streamsでは、最大1回または少なくとも1回(受信者から送信される明示的な確認応答)の両方が可能です
消費者向けのブロッキングモード
Pub/Subはブロッキングモードのみです。チャネルにサブスクライブすると、クライアントはサブスクライバーモードになり、コマンドを発行できなくなります([P]SUBSCRIBE
を除く) 、[P]UNSUBSCRIBE
、PING
およびQUIT
)、読み取り専用になりました。
Redis Streamsを使用すると、コンシューマーはブロッキングモードでメッセージを読むことができます。
ファンアウト
Pub/Subはファンアウトのみです。すべてのアクティブなクライアントがすべてのメッセージを受け取ります。
Redis Streamsはファンアウトを可能にします(XREAD
を使用) )だけでなく、同じストリームから多くのクライアントにメッセージの異なるサブセットを提供します。これにより、同じメッセージが複数のコンシューマーに配信されないように、さまざまなメッセージをさまざまなワーカーにルーティングすることで、メッセージ処理を拡張できます。この最後のシナリオは、消費者グループで実現されます。 。
Redis Streamsは、タイムスタンプ、フィールドと値のペア、範囲など、さらに多くの機能を提供します。これは、常にStreamsを使用する必要があるという意味ではありません。ユースケースがPub/Subで実現できる場合は、Pub/Subを使用することをお勧めします。 Streamsでは、メモリ使用量に注意する必要があります。