首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用ServiceStack.Redis客户端版本4.0.44从远程服务器访问Redis哨兵时获得“ServiceStack.Redis”

使用ServiceStack.Redis客户端版本4.0.44从远程服务器访问Redis哨兵时获得“ServiceStack.Redis”
EN

Stack Overflow用户
提问于 2015-10-09 14:02:16
回答 1查看 1.4K关注 0票数 4

我们有一个带有两个redis服务器的redis配置。我们还有3个哨兵来监视这两个实例,并在需要时启动故障转移。

我们从一些应用程序中断断续续地得到了以下问题:

ServiceStack.Redis.RedisException: No Redis Sentinels were available ---> ServiceStack.Redis.RedisException: Unable to Connect: sPort: 0

Unable to Connect: sPort: 0部分可能表示它是一个ConnectTimeout问题(按照这个问题:ServiceStack.Redis:无法连接: sPort: 0)。然而,我不太相信这就是问题所在,因为上面写着“没有红色哨兵可用”。

虽然我们在一些应用程序上断断续续地遇到了这个问题,但有些应用程序(例如,我们编写的一些控制台应用程序)似乎一直在解决这个问题。

谁能弄清楚这个问题是怎样解决的呢?如果您在谷歌上搜索“ServiceStack.Redis是可用的”,那么您只会得到ServiceStack.Redis GitHub页面,该页面具有输出此消息的实际代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 20:05:31

当试图连接到一个可用的哨兵时,抛出错误消息。在RedisSentinel工作人员之后超过RedisSentinel.MaxFailures (缺省值: 5)持续错误。

Redis客户端需要能够连接到一个可用的哨兵,以发现可用的主程序和从站,并在主程序不再响应和失败时得到通知。

您可以增加RedisSentinel.MaxFailures计数,让它继续循环并连接到可用的Redis。我还使用增加了一个提交来重置故障计数,当它能够连接到有效的哨兵时(因此只有连续的错误才会针对MaxFailures进行检查),此更改可从v4.0.47即现在的可在MyGet上获得中获得。

Redis Client Stats的打印快照

要更好地了解Redis连接的健康情况,可以转储内部Redis统计的快照,以显示客户端连接的活动和健康状况:

代码语言:javascript
代码运行次数:0
运行
复制
RedisStats.ToDictionary().PrintDump();

启用调试日志记录

您可以启用调试日志记录,以便在首选日志提供程序中查看更多错误详细信息:

代码语言:javascript
代码运行次数:0
运行
复制
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:true);

但是,这也会发出Redis命令,因为这些命令可能过于冗长,所以可以使用以下方法进行抑制:

代码语言:javascript
代码运行次数:0
运行
复制
RedisConfig.DisableVerboseLogging = true;

句柄错误回调

此外,RedisSentinel还提供了许多钩子来处理自定义事件,例如,当哨兵工作人员通过分配OnWorkerError委托无法连接时,您可以处理这些事件,例如:

代码语言:javascript
代码运行次数:0
运行
复制
var sentinel = new RedisSentinel(sentinelHost, masterName)
{
    OnWorkerError = ex =>
    {
        "Worker error: {0}".Print(ex);
    },
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33040280

复制
相关文章

相似问题

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