2017-10-10 11 views
0

해시 데이터 배포와 병합 된 장애 조치 패턴이있는 Redis 분산 캐시로 작업하고 있습니다. 내 구성 :StackShare Redis Sentinel 클라이언트

  Sentinel1     Sentinel4 
Master1      Master2 
      Sentinel2     Sentinel5 
Slave1      Slave2 
      Sentinel3     Sentinel6 

내 코드에서 나는 센티넬을 사용하여 마스터 캐시에 액세스해야합니다.

어떤 점을 지적해야합니까?

ConnectionMultiplexer의 구성 안에 모든 센티넬 enpoint를 등록해야한다고 가정합니다.

은이 코드를 사용하여 감시 내 클라이언트를 연결할 수 M : 일단 내가 setString의과에는 getString 같은 표준 레디 스 방법을 사용하여 캐시 데이터베이스에 액세스하는 데 필요한 연결을 가지고

var options = new ConfigurationOptions() 
    { 
     CommandMap = CommandMap.Sentinel, 
     EndPoints = { { IP, Port } }, 
     AllowAdmin = true, 
     TieBreaker = "", 
     ServiceName = ServiceName, 
     SyncTimeout = 5000, 
     AbortOnConnectFail = true, 
     Ssl = false 
    }; 
    var connection = ConnectionMultiplexer.Connect(options, Console.Out); 
    return connection; 

... 그래서

db = conn.getDatabase(); 
db.getString(key); 
db.setString(key, value); 

이 시점에서 "이 작업은 명령 - 맵에서 비활성화되어 사용할 수 없습니다 : SETEX"또는 GET이 표시됩니다.

전초 인에게 현재 마스터에 연결을 요청하는 방법이 있어야한다고 가정하지만 유용한 코드 예제를 많이 찾지 못했습니다. 아무도 도와 줄 수 있습니까?

답변

0

Sentinel에 연결하면 Sentinel 관련 명령 만 발행 할 수 있다고 생각합니다. 대신에 과 같이 Redis 인스턴스에 연결해보십시오.

Redis 클라이언트는 Redis config에 변경 사항이 있음을 알고 있습니다. (현재 조사 중이며 그 질문을 찾은 방법입니다.) Stackexchange.Redis에서 구현되지 않은 부분이 있다고 생각합니다. 아직 - this을보십시오.