Redis Timeout при выполнении SETEX - PullRequest
0 голосов
/ 10 января 2020

Я использую StackExchange.Redis 1.2.6 на своем клиентском сервере для подключения к серверу redis версии 3.0.504, установленному на сервере windows. Я сталкиваюсь с нижеуказанным исключением тайм-аута на моем клиентском сервере, вызывающем несогласованность приложения.

Мои наблюдения:

  1. На ЦП или памяти не используется много время исключения в моем клиентском сервере.
  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 параллельный, inst: 1, mgr: executeteSelect, err: очередь: 3, кв: 0, qs: 3, q ​​c: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: xxxx, serverEndpoint: Unspecified / xxxx: 6379, keyHashSlot: 3134 , IOCP: (Занято = 0, Свободно = 1000, Мин = 8, Макс = 1000), РАБОЧИЙ: (Занято = 78, Свободно = 1969, Мин = 8, Макс = 2047) (Пожалуйста, взгляните на эту статью для некоторых Типичные проблемы на стороне клиента, которые могут вызвать тайм-ауты: http://stackexchange.github.io/StackExchange.Redis/Timeouts)

1 Ответ

0 голосов
/ 23 марта 2020

Вы пробовали что-нибудь подобное?

configuration.SyncTimeout = 15000;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...