首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stackexchange Redis Sentinel客户端

Stackexchange Redis Sentinel客户端
EN

Stack Overflow用户
提问于 2017-10-11 07:36:11
回答 2查看 2.9K关注 0票数 2

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

代码语言:javascript
复制
          Sentinel1                   Sentinel4
Master1                     Master2
          Sentinel2                   Sentinel5
Slave1                      Slave2
          Sentinel3                   Sentinel6

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

我该指出哪一个呢?

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

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

代码语言:javascript
复制
  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;

一旦获得连接,我就需要使用SetString和getString等标准redis方法访问缓存数据库……所以

代码语言:javascript
复制
db = conn.getDatabase();
db.getString(key);
db.setString(key, value);

此时,我收到一个错误,指出“此操作已在命令映射中禁用,无法使用: SETEX”或GET。

我想应该有一种方法来询问前哨与当前主控的连接,但我没有找到很多有用的代码示例。有谁能帮帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2020-10-02 04:17:46

事情发生了变化,现在在redis连接字符串或配置中指定一个前哨端点和serviceName就足够了。其余的都封装为this提交的一部分。

代码语言:javascript
复制
var conn = ConnectionMultiplexer.Connect("sentinel:26379,serviceName=mymaster");
var db = conn.GetDatabase();
db.StringSet("key", "value");
票数 3
EN

Stack Overflow用户

发布于 2017-11-15 06:19:11

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

至于让Redis客户端通过前哨知道Redis的配置发生了变化(我现在正在研究,这就是我发现你的问题的原因),我认为这部分还没有在Stackexchange.Redis中实现--看看this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46677528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档