Redis Cache Количество подключенных клиентов увеличивается - PullRequest
0 голосов
/ 28 января 2019

Azure Portal - Redis Cache - Max Connected Clients

Я занимаюсь разработкой приложения с микросервисной архитектурой, в котором я использую Redis Cache для кэширования часто используемой информации.Проблема в том, что число подключенных клиентов постоянно увеличивается, и я не знаю, почему.

Я получаю доступ к Redis Cache из веб-API ASP.NET и веб-задания.Для подключения используется пакет NuGet «StackExchange.Redis» (https://github.com/StackExchange/StackExchange.Redis).

. Способ подключения к Redis в коде:

connection = ConnectionMultiplexer.Connect(configurationOptions);
connection.ConnectionFailed += ConnectionFailed;
connection.ConnectionRestored += ConnectionRestored;
connection.InternalError += InternalError;

if (!connection.IsConnected)
{
    //_traceSource.TraceWarning($"Connection to REDIS '{_endpointAddress}' was not established.");
}

database = connection.GetDatabase();

return database;

Кроме того, я реализовалметод Dispose (), чтобы убедиться, что соединения отключены правильно:

public void Dispose()
{
   connection?.Close(true);
}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я бы предпринял следующие 3 шага:

  1. Добавить хук отключения, который вызывает connection.close ().

    См .: Как вызвать событие перед Environment.Exit ()?

    Но не обязательно гарантированно вызываться всегда.Следовательно, # 2:

  2. Настройте Redis с тайм-аутом клиента для закрытия незанятых соединений> некоторый порог https://redis.io/topics/clients

  3. Убедитесь, что дублирующие соединения не создаются без необходимости.Пример: новое соединение создается при каждом вызове Redis.Ответ @Keyur Ramoliya, кажется, относится к этому.

0 голосов
/ 28 января 2019

Реализуйте статический класс Helper, как это.

/// <summary>
/// Helper class for connection with Redis Server.
/// </summary>
public static class Helper
{
    /// <summary>
    /// Configuration option to connect with Redis Database.
    /// </summary>
    private static Lazy<ConfigurationOptions> configOptions = new Lazy<ConfigurationOptions>(() =>
    {
        var configOptions = new ConfigurationOptions();
        configOptions.EndPoints.Add("Your Redis sever name");
        configOptions.AbortOnConnectFail = false;
        configOptions.AllowAdmin = true;
        configOptions.KeepAlive = 4;
        configOptions.Password = "Redis server password";
        return configOptions;
    });

    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(configOptions.Value));

    /// <summary>
    /// Connection property to connect Redis Database.
    /// </summary>
    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }
}

После этого используйте его так, как вам нужно.

var RedisDatabase = Helper.Connection.GetDatabase(Database Number);

Это будет поддерживать соединения автоматически.Надеюсь, это поможет.

...