CommandFlags.FireAndForget
応答を気にしない状況を対象としていることを理解しています。
実行中のアプリケーションにとって応答は重要ではありませんが、配信も保証されますか?
CommandFlags.FireAndForget
応答を気にしない状況を対象としていることを理解しています。
実行中のアプリケーションにとって応答は重要ではありませんが、配信も保証されますか?
実際、Redis プロトコルは「ファイア アンド フォーゲット」操作を実際にはサポートしていません。pub/sub トラフィックを除いて、すべての Redis コマンドは応答と照合され、Redis サーバーに応答を省略するように指示する方法はありません。
現在、一部のクライアント (StackExchange.Redis など) は、プロトコルの非同期実装を通じて「ファイア アンド フォーゲット」モードをシミュレートしています。実際、StackExchange.Redis の「ファイア アンド フォーゲット」モードは「非同期」モードと非常によく似ていますが、応答が受信時に単に破棄される点が異なります。
信頼できますか?TCP/IP が配信を保証する限り、それは配信を保証します。ネットワークはパケットを送信しようとします (パケットの一部が失われた場合、最終的にパケットは再送信されます) が、これはすべて TCP によって処理されます。
サーバーがダウンしている場合、または接続を閉じることを決定した場合、クライアントはソケットから読み取ろうとしたときにのみ認識されます。StackExchange.Redis は、しばらくの間、切断された接続でコマンドを送信し続ける可能性があります。中間層 (Twemproxy など) を使用している場合、状況はさらに悪化する可能性があります。
言い換えると、「ファイア アンド フォーゲット」トラフィックは通常サーバーに送信され、ネットワーク上でメッセージが失われることはありませんが、サーバーまたは接続の問題がある場合、クライアントが気付く前に一部のトラフィックが失われる可能性があります。それ。これをベスト エフォート型の動作と呼びます。