sql >> データベース >  >> NoSQL >> Redis

Redis Pub /SubとRedisStreamの主な違いは何ですか?

    データストレージ

    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]UNSUBSCRIBEPING およびQUIT )、読み取り専用になりました。

    Redis Streamsを使用すると、コンシューマーはブロッキングモードでメッセージを読むことができます。

    ファンアウト

    Pub/Subはファンアウトのみです。すべてのアクティブなクライアントがすべてのメッセージを受け取ります。

    Redis Streamsはファンアウトを可能にします(XREADを使用) )だけでなく、同じストリームから多くのクライアントにメッセージの異なるサブセットを提供します。これにより、同じメッセージが複数のコンシューマーに配信されないように、さまざまなメッセージをさまざまなワーカーにルーティングすることで、メッセージ処理を拡張できます。この最後のシナリオは、消費者グループで実現されます。 。

    Redis Streamsは、タイムスタンプ、フィールドと値のペア、範囲など、さらに多くの機能を提供します。これは、常にStreamsを使用する必要があるという意味ではありません。ユースケースがPub/Subで実現できる場合は、Pub/Subを使用することをお勧めします。 Streamsでは、メモリ使用量に注意する必要があります。




    1. MongoDB $ min

    2. Rails 3:アクティブレコードとモンゴイドを同時に使用する方法

    3. mongodb3.6の新しいURLを使用してgolangから接続する方法

    4. 集約フレームワークはインデックスを使用できません