2017-10-10 118 views
0

我與Redis分佈式緩存一起使用,故障轉移模式與哈希數據分佈合併。我的配置是:Stackexchange Redis Sentinel客戶端

  Sentinel1     Sentinel4 
Master1      Master2 
      Sentinel2     Sentinel5 
Slave1      Slave2 
      Sentinel3     Sentinel6 

在我的代碼中,我需要使用sentinel訪問主緩存。

哪一個有我指向?

我想我必須在ConnectionMultiplexer的配置中註冊所有的sentinel enpoints。

我爲能夠連接我的客戶端使用此代碼的前哨:

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; 

一旦得到了,我需要使用標準的Redis的方法,如的SetString和GetString訪問緩存數據庫的連接...所以

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

在這一點上我得到一個錯誤,指出「此操作已被禁用在命令行中,不能使用:SETEX」或GET。

我想應該有一種方法來詢問哨兵到當前主人的連接,但我沒有找到許多有用的代碼示例。 任何人都可以幫助我嗎?

回答

0

我相信如果你連接到Sentinel,你只能發出特定於Sentinel的命令。嘗試連接到Redis實例,如here所述。

至於讓Redis客戶端通過Sentinel知道Redis配置發生了變化(我現在正在研究這個問題,這就是我發現你的問題的原因)我認爲那部分沒有在Stackexchange.Redis中實現但 - 看看this

相關問題