복붙노트

[REDIS] Stackexchange.Redis '화재 및 보장 배달을 잊지합니까?

REDIS

Stackexchange.Redis '화재 및 보장 배달을 잊지합니까?

나는 CommandFlags.FireAndForget 당신이 응답을 걱정하지 않는 경우를위한 것입니다 것으로 알고 있습니다.

또한 응답이 실행중인 응용 프로그램에 대한 중요하지 않다하더라도 전달을 보장합니까?

해결법

  1. ==============================

    1.사실, 레디 스 프로토콜은 정말 지원하지 않습니다 "화재와 잊지"작업을. 술집 / 하위 트래픽을 제외하고, 모든 레디 스 명령은 응답과 일치하고, 응답을 생략하기 위해 레디 스 서버를 알 수있는 방법이 없습니다.

    사실, 레디 스 프로토콜은 정말 지원하지 않습니다 "화재와 잊지"작업을. 술집 / 하위 트래픽을 제외하고, 모든 레디 스 명령은 응답과 일치하고, 응답을 생략하기 위해 레디 스 서버를 알 수있는 방법이 없습니다.

    이제 (StackExchange.Redis 같은) 일부 클라이언트는 "화재와 잊지"시뮬레이션 프로토콜의 비동기 구현을 통해 모드. 사실, 그들이받은 때 응답이 단순히 폐기를 제외하고 StackExchange.Redis 모드에서, "비동기"모드와 매우 유사하다 "화재와 잊지".

    그것은 믿을 수 있습니까? 음, 지금까지 TCP / IP는 전송을 보장뿐만 배달을 보장합니다. 네트워크는 패킷 (그들 중 일부는 손실 된 경우 결국 패킷을 다시 전송됩니다)를 전송하기 위해 열심히 노력하지만,이 모든 TCP에 의해 처리됩니다.

    서버가 다운되었거나 연결을 종료하기로 결정하는 경우가 소켓에서 읽기를 시도 할 때 이제 클라이언트는 알고있을 것입니다. StackExchange.Redis 행복하게 잠시 동안 죽은 연결에 명령을 보낼 수 계속할 수 있습니다. 당신이 middletier (예 : Twemproxy 등)이있는 경우, 상황은 더 악화 될 수 있습니다.

    즉, "화재와 잊지"에서 트래픽은 일반적으로 서버로 전송되며, 클라이언트가 통지에 기회를하기 전에 어떤 메시지가 네트워크에서 손실되지 않습니다,하지만 당신은 서버 또는 연결 문제가있는 경우, 일부 트래픽이 손실 될 수 있습니다 그것. 나는이 최선의 노력을 동작 부를 것이다.

  2. from https://stackoverflow.com/questions/25593894/does-stackexchange-redis-fire-and-forget-guarantees-delivery by cc-by-sa and MIT license