【问题标题】:Redis Timeout performing SETEXRedis 超时执行 SETEX
【发布时间】:2020-04-28 05:49:36
【问题描述】:

我在客户端服务器上使用 StackExchange.Redis 1.2.6 与安装在 Windows 服务器上的 Redis 服务器版本 3.0.504 连接。我在客户端服务器中遇到以下超时异常,导致应用程序不一致。

我的观察:

  1. 在我的异常发生时没有太多 CPU 或内存使用 客户端服务器。
  2. 我查看了慢日志,但找不到 当时的任何命令。

以下是我的配置,我在整个应用程序中保持与 redis 的单一连接。

private static ConfigurationOptions GetRedisClusterConfiguration() {
    ConfigurationOptions configuration = null;
    try {
        RedisConfigSection config = System.Configuration.ConfigurationManager.GetSection(RedisConfigSection.SECTION_NAME) as RedisConfigSection;
        configuration = new ConfigurationOptions();
        configuration.AbortOnConnectFail = false;
        configuration.ConnectTimeout = 15000;
        configuration.ConfigCheckSeconds = 60;
        configuration.AllowAdmin = true;
        configuration.ConnectRetry = 5;
        if (!string.IsNullOrEmpty(config.Servers.Password)) configuration.Password = config.Servers.Password;

        foreach(var server in config.Servers) {
            configuration.EndPoints.Add($ "{server.Host}:{server.Port}");
        }
    }
    catch(Exception ex) {
        log.Error(ex);
    }
    return configuration;
}

public static ConnectionMultiplexer Instance {
    get {
        if (instance == null) {
            lock(safetyLock) {
                if (instance == null) {
                    try {
                        ConfigurationOptions configuration = GetRedisClusterConfiguration();
                        StringWriter loginfo = new StringWriter();
                        instance = ConnectionMultiplexer.Connect(configuration, loginfo);
                        if (instance != null && !instance.IsConnected) log.Info(loginfo.ToString());
                    }
                    catch(Exception ex) {
                        log.Error(ex);
                    }
                }
            }
        }
        return instance;
    }
}

例外:

StackExchange.Redis.RedisTimeoutException:执行 SETEX 超时 vuprodgenericgenevaservice_executormsg_geneva prod 并行,inst:1, 经理:ExecuteSelect,错误:从不,队列:3,qu:0,qs:3,qc:0,wr:0, wq: 0, in: 0, ar: 0, clientName: xxxx, serverEndpoint: 未指定/xxxx:6379,keyHashSlot:3134,IOCP: (忙=0,空闲=1000,最小=8,最大=1000),工人: (忙碌=78,空闲=1969,Min=8,Max=2047) (请看这篇文章 对于一些可能导致超时的常见客户端问题: http://stackexchange.github.io/StackExchange.Redis/Timeouts)

【问题讨论】:

    标签: c# redis


    【解决方案1】:

    你尝试过这样的事情吗?

    configuration.SyncTimeout = 15000;
    

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2017-05-15
      • 1970-01-01
      • 2018-01-09
      • 2021-10-07
      • 2015-06-16
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多