Рекомендации по подключению Redis для использования с функцией потребления Azure

Рекомендации 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 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам