복붙노트

[REDIS] StackExchange.Redis와 일시적인 네트워크 오류로 처리

REDIS

StackExchange.Redis와 일시적인 네트워크 오류로 처리

StackExchange.Redis 클라이언트를 사용하는 경우 일시적인 네트워크 문제를 처리에 대한 지침을 찾고.

설명을 위해, 나는 처음에 ConnectionMultiplexer.Connect로 레디 스 서버에 연결 의미하지 않는다 (). 나는 작업의 중간에 어떤 이유로 중단되는 연결을 처리하는 방법을 언급하고있다. (우리는 명령이 멱등, StringSet, StringGet되어 있다고 가정 할 수 있습니다)

우리가 StackExchange 클라이언트에 ServiceStack에서 마이그레이션 때문에 부탁드립니다. ServiceStack를 사용하여 우리가 대체하는 코드에서 예외가 잡힌 및 작업이 짧은 Thread.sleep를 한 후 다시 시도 될 것이다 (). 이것은 우리의 생산 환경에서 매우 자주 발생하고 대부분의 경우에 재시도 작동합니다.

보통 메시지 "설정된 연결이 호스트 컴퓨터에서 소프트웨어에 의해 중단되었습니다"또는 "기존 연결이 원격 호스트에 의해 강제로 끊겼습니다"와 System.Net.SocketException입니다

System.Net.SocketException가 발생하면 syncTimeout 시간이 경과 할 때까지, StackExchange.Redis가 자동으로 재 시도 하는가?

SE.Redis가 자동으로 재 시도하지 않는 경우, 초기 동작 불량과 우리의 코드에 재시도 사이에 발생해야 어떤 제안 단계가 있습니다? 예를 들면 :

어떤지도 주셔서 감사합니다.

해결법

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

    1.자동으로 재 시도하지 않습니다. 오류가 발생하면 잡아 자신을 다시 시도해야합니다.

    자동으로 재 시도하지 않습니다. 오류가 발생하면 잡아 자신을 다시 시도해야합니다.

    실제 재시도의 측면에서, 한 멀티플렉서의 연결 중 일부는 아직 살아있다, 당신은 방금 백업 할 수 있습니다 다시 시도하십시오.

    연결이 실패하면 복구하려고하지만 간헐적으로 일부 복구 할 수없는 상태에 들어가 끊긴 남아있을 수 오래 서있는 버그가있다. 우리는, isConnected 이제까지 false를 반환하는 경우 멀티플렉서를 재 - 생성하여이 문제를 해결.

  2. from https://stackoverflow.com/questions/45446394/handling-of-transient-network-errors-with-stackexchange-redis by cc-by-sa and MIT license