2017-10-10 214 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