Рекомендации по подключению Redis для использования с функцией потребления Azure - PullRequest
0 голосов
/ 30 августа 2018

Рекомендации Redis рекомендуют использовать долговечный ConnectionMultiplexer. Однако я хочу использовать Redis внутри функции потребления лазури, которая может жить только пару секунд (но запускается много раз).

Мне было интересно, был ли у меня такой код:

        private static Lazy<ConnectionMultiplexer> lazyRedisConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        string cacheConnection = ConfigurationManager.AppSettings["RedisKey"].ToString();
        return ConnectionMultiplexer.Connect(cacheConnection);
    });

    public static ConnectionMultiplexer RedisConnection
    {
        get
        {
            return lazyRedisConnection.Value;
        }
    }

В функции потребления Azure, которая запускается, например, 10000 раз. Из-за того, как работают функции потребления Azure, это фактически создаст 10000 подключений, а не будет повторно использовать одно?

Было бы безопаснее вручную создать / утилизировать соединение для каждой функции?

1 Ответ

0 голосов
/ 30 августа 2018

Даже если выполнение одной функции может занять всего пару секунд, функция экземпляр (сервер) используется повторно для нескольких запросов. На практике при постоянном потоке входящих запросов каждый экземпляр живет долго (от нескольких минут до нескольких часов).

Соединения с базой данных следует повторно использовать между вызовами, которые выполняются в одном и том же экземпляре.

Статические поля инициализируются один раз, а затем используются повторно для нескольких выполнений, поэтому ваш код не будет создавать 10000 соединений, но может быть 1, 2 или 3 в зависимости от того, сколько экземпляров будет создано контроллером масштабирования.

Когда экземпляр отключается, ваш домен приложений будет перезаписан, поэтому соединения с Redis будут прерваны.

Я бы предложил вам продолжить с кодом, который вы цитировали.

...