[REDIS] 어떻게 ConnectionMultiplexer는 연결 해제를 처리합니까?
REDIS어떻게 ConnectionMultiplexer는 연결 해제를 처리합니까?
StackExchange.Redis에 대한 기본 사용 설명서는 ConnectionMultiplexer는 수명이 긴되고 재사용 될 것으로 예상한다고 설명한다.
그러나 서버에 대한 연결이 무엇을 고장에 대한 때? 합니까 ConnectionMultiplexer은 자동으로 다시 연결하거나 코드를 작성하는 데 필요한 그것 (그 대답을 인용)이 대답과 같다 :
if (RedisConnection == null || !RedisConnection.IsConnected)
{
RedisConnection = ConnectionMultiplexer.Connect(...);
}
RedisCacheDb = RedisConnection.GetDatabase();
연결이 끊어 회복을 처리하기 위해 위의 코드 뭔가 좋은, 아니면 실제로 여러 ConnectionMultiplexer 인스턴스 초래? 같은 맥락에서, 어떻게는, isConnected 속성을 해석해야 하는가?
[제외 : 나는 위의 코드는 특히 멀티 스레드 환경에서, 초기화 지연의 아주 나쁜 형태의 생각 - 싱글 톤에 존 소총의 문서를 참조].
해결법
-
==============================
1.여기에 푸른 레디 스 캐시 팀에서 권장하는 패턴은 다음과 같습니다
여기에 푸른 레디 스 캐시 팀에서 권장하는 패턴은 다음과 같습니다
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => { return ConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,password=..."); }); public static ConnectionMultiplexer Connection { get { return lazyConnection.Value; } }
몇 가지 중요한 포인트 :
-
==============================
2.예, 수정하면 연결이 끊어하기 위해 검증의 형식이 필요합니다. 일부 스레드 안전은 또한뿐만 아니라에서 고려되어야한다. 이것은 내가 보통이 작업을 수행하는 방법이다 :
예, 수정하면 연결이 끊어하기 위해 검증의 형식이 필요합니다. 일부 스레드 안전은 또한뿐만 아니라에서 고려되어야한다. 이것은 내가 보통이 작업을 수행하는 방법이다 :
private static ConnectionMultiplexer _redis; private static readonly Object _multiplexerLock = new Object(); private void ConnectRedis() { try { _redis = ConnectionMultiplexer.Connect("...<connection string here>..."); } catch (Exception ex) { //exception handling goes here } } private ConnectionMultiplexer RedisMultiplexer { get { lock (_multiplexerLock) { if (_redis == null || !_redis.IsConnected) { ConnectRedis(); } return _redis; } } }
나는 레디 스 엔드 포인트를 호출 할 필요가 사방 그럼 난 RedisMultiplexer 속성을 사용합니다. 문서가 꽤 경량 전화 말한다 때문에 나는 보통 GetDatabase () 호출의 결과를 저장하지 않습니다.
from https://stackoverflow.com/questions/28792196/how-does-connectionmultiplexer-deal-with-disconnects by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] StackExchange.Redis에서 비동기 명령과 Task.WhenAny 기다리고 있습니다 후 시간 제한 예외 (0) | 2020.01.03 |
---|---|
[REDIS] 자바 스크립트 스텁 레디 스가 상호 작용 Sinon를 사용하여 (0) | 2020.01.03 |
[REDIS] 어떻게 C ++ 프로그램 내에서 레디 스를 사용 하는가? (0) | 2020.01.03 |
[REDIS] 레디 스의 데시벨 값에서 검색 (0) | 2020.01.02 |
[REDIS] StackExchange.Redis와 ServiceStack.Redis의 차이 (0) | 2020.01.02 |