Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 执行SETEX的Redis超时_C#_Redis - Fatal编程技术网

C# 执行SETEX的Redis超时

C# 执行SETEX的Redis超时,c#,redis,C#,Redis,我正在客户端服务器上使用StackExchange.Redis 1.2.6与windows服务器上安装的Redis server版本3.0.504连接。我在客户端服务器中遇到以下超时异常,导致应用程序不一致 private static ConfigurationOptions GetRedisClusterConfiguration() { ConfigurationOptions configuration = null; try { RedisConfigS

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

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;
    }
}
我的观察:

  • 在我的系统中出现异常时,没有太多的CPU或内存使用 客户端服务器
  • 我看了看慢日志,没能找到 当时的任何命令
  • 下面是我的配置,我在整个应用程序中保持与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_日内瓦平行生产线,inst:1, 经理:执行选择,错误:从不,队列:3,qu:0,qs:3,qc:0,wr:0, wq:0,in:0,ar:0,客户端名称:xxxx,服务器端点: 未指定/xxxx:6379,密钥哈希槽:3134,IOCP: (忙=0,空闲=1000,最小=8,最大=1000),工作者: (忙=78,闲=1969,最小=8,最大=2047)(请看这篇文章 对于一些可能导致超时的常见客户端问题: )


    你试过这样的东西吗

    configuration.SyncTimeout = 15000;