Stackexchange Redis Sentinel客户端

时间:2017-10-10 23:36:11

标签: c# caching redis stackexchange.redis redis-sentinel

我正在使用Redis分布式缓存,故障转移模式与散列数据分发合并。我的配置是:

          Sentinel1                   Sentinel4
Master1                     Master2
          Sentinel2                   Sentinel5
Slave1                      Slave2
          Sentinel3                   Sentinel6

在我的代码中,我需要使用sentinel访问主缓存。

我要指出哪一个?

我想我必须在ConnectionMultiplexer的配置中注册所有的哨兵点。

我可以使用以下代码将我的客户端连接到哨兵:

  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。

我想应该有一种方法可以向哨兵询问与当前主人的连接,但我找不到很多有用的代码示例。 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

情况发生了变化,今天足以在redis连接字符串或“配置”中指定哨兵端点和serviceName。其余所有内容都已封装为this提交的一部分。

var conn = ConnectionMultiplexer.Connect("sentinel:26379,serviceName=mymaster");
var db = conn.GetDatabase();
db.StringSet("key", "value");

答案 1 :(得分:0)

我相信如果您连接到Sentinel,您只能发出特定于Sentinel的命令。请尝试连接到Redis实例,如here所述。

至于让Redis客户端通过Sentinel知道Redis配置发生了变化(我正在研究的东西,这就是我发现你的问题的方式)我觉得这部分没有在Stackexchange.Redis中实现 - 看看this