Краткое руководство. Использование Кэша Azure для Redis с приложениями .NET Core

Из этого краткого руководства вы узнаете, как реализовать кэш Azure для Redis в приложении .NET Core для обеспечения доступа к защищенному выделенному кэшу, к которому может обращаться любое приложение в Azure. Вы будете использовать клиент StackExchange.Redis с кодом C# в консольном приложении .NET Core.

Переход к коду на GitHub

Клонируйте репозиторий https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet-core в GitHub.

Необходимые компоненты

Создание кэша

  1. Чтобы создать кэш, войдите на портал Azure и выберите Создать ресурс.

    Область навигации слева с выделенным элементом

  2. На странице Создание выберите Базы данных, а затем Кэш Azure для Redis.

    Страница

  3. На странице Новый кэш Redis настройте параметры для нового кэша.

    Параметр Выберите значение Description
    Подписка Раскройте список и выберите нужную подписку. В этой подписке будет создан новый экземпляр кэша Redis для Azure.
    Группа ресурсов Раскройте список и выберите группу ресурсов или нажмите Создать и введите имя для новой группы ресурсов. Имя группы ресурсов, в которой будут созданы кэш и другие ресурсы. Поместив все ресурсы приложения в одну группу ресурсов, вы сможете легко управлять ими и/или удалить их вместе.
    DNS-имя Введите уникальное имя. Имя кэша должно быть строкой длиной от 1 до 63 символов и содержать только цифры, буквы и дефисы. Имя должно начинаться и заканчиваться цифрой или буквой и не может содержать более одного дефиса подряд. Имя узла экземпляра кэша <DNS-имя.redis.cache.windows.net>.
    Местонахождение Откройте список и выберите расположение. Выберите регион рядом с другими службами, используюющими кэш.
    Тип кэша В раскрывающемся списке выберите уровень. Уровень определяет размер, производительность кэша и доступные функции. Дополнительные сведения см. в обзоре предложения "Кэш Redis для Azure".
  4. Выберите вкладку Сети или нажмите кнопку Сети в нижней части страницы.

  5. На вкладке Сети выберите способ подключения.

  6. Нажмите кнопку "Далее" или нажмите кнопку "Далее" в нижней части страницы, чтобы просмотреть вкладку "Дополнительно".

    Снимок экрана: вкладка

    • Для кэшей "Базовый" или "Стандартный" переключите выбор порта, отличного от TLS. Вы также можете выбрать, нужно ли включить проверку подлинности Microsoft Entra.
    • Для кэша Premium настройте параметры для порта, отличного от TLS, кластеризация, управляемого удостоверения и сохраняемости данных. Вы также можете выбрать, нужно ли включить проверку подлинности Microsoft Entra.
  7. Выберите вкладку Next: Tags (Далее: теги) или нажмите в нижней части страницы кнопку Next: Tags (Далее: теги).

  8. При необходимости на вкладке Теги введите имя и значение, чтобы классифицировать ресурс.

  9. Выберите Review + create (Просмотреть и создать). Вы будете перенаправлены на вкладку Проверка и создание, где Azure проверит вашу конфигурацию.

  10. Когда отобразится сообщение "Проверка пройдена" зеленого цвета, выберите Создать.

Для создания кэша требуется некоторое время. Вы можете отслеживать ход выполнения на странице обзорных сведений кэша Azure для Redis. Когда Состояние примет значение Running (Выполняется), кэш будет готов к использованию.

Получение имени узла, портов и ключей доступа с помощью портала Azure

Чтобы подключить сервер Кэша Azure для Redis, для клиента кэша необходимо указать имя узла, порты и ключ для кэша. Некоторые клиенты могут ссылаться на эти элементы с помощью незначительно различающихся имен. Вы можете получить имя узла, порты и ключи на портале Azure.

  • Чтобы получить ключи доступа, выберите "Проверка подлинности " в меню "Ресурс". Затем откройте вкладку "Ключи доступа".

    Ключи кэша Azure для Redis

  • Чтобы получить имя узла и порты для кэша, выберите "Обзор " в меню "Ресурс". Имя узла имеет вид <DNS-имя>.redis.cache.windows.net.

    Свойства Кэша Azure для Redis

Запомните или запишите имя узла и первичный ключ доступа. Эти значения вам потребуются для создания секрета CacheConnection.

Добавление локального секрета для строки подключения

В том же окне командной строки выполните следующую команду, чтобы сохранить новый секрет с именем CacheConnection. Не забудьте заменить заполнители (включая угловые скобки) именем кэша и первичным ключом доступа.

dotnet user-secrets set CacheConnection "<cache name>.redis.cache.windows.net,abortConnect=false,ssl=true,allowAdmin=true,password=<primary-access-key>"

Подключение к кэшу с помощью RedisConnection

Подключением к кэшу Redis для Azure управляет класс RedisConnection. Сначала в этом операторе устанавливается подключение от Program.cs:

      _redisConnection = await RedisConnection.InitializeAsync(connectionString: configuration["CacheConnection"].ToString());

В RedisConnection.cs вы увидите, что пространство имен StackExchange.Redis было добавлено в код. Оно требуется для класса RedisConnection.

using StackExchange.Redis;

Код RedisConnection гарантирует постоянное наличие работоспособного подключения к кэшу путем управления экземпляром ConnectionMultiplexer из StackExchange.Redis. В случае потери соединения и невозможности автоматического повторного подключения класс RedisConnection повторно создает подключение.

Для получения дополнительных сведений см. статью StackExchange.Redis и код в репозитории GitHub.

Выполнение команд кэша

В program.cs можно увидеть следующий код для метода RunRedisCommandsAsync в классе Program для консольного приложения:

private static async Task RunRedisCommandsAsync(string prefix)
    {
        // Simple PING command
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: PING");
        RedisResult pingResult = await _redisConnection.BasicRetryAsync(async (db) => await db.ExecuteAsync("PING"));
        Console.WriteLine($"{prefix}: Cache response: {pingResult}");

        // Simple get and put of integral data types into the cache
        string key = "Message";
        string value = "Hello! The cache is working from a .NET console app!";

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        RedisValue getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: SET {key} \"{value}\" via StringSetAsync()");
        bool stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync(key, value));
        Console.WriteLine($"{prefix}: Cache response: {stringSetResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        // Store serialized object to cache
        Employee e007 = new Employee("007", "Davide Columbo", 100);
        stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync("e007", JsonSerializer.Serialize(e007)));
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache response from storing serialized Employee object: {stringSetResult}");

        // Retrieve serialized object from cache
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync("e007"));
        Employee e007FromCache = JsonSerializer.Deserialize<Employee>(getMessageResult);
        Console.WriteLine($"{prefix}: Deserialized Employee .NET object:{Environment.NewLine}");
        Console.WriteLine($"{prefix}: Employee.Name : {e007FromCache.Name}");
        Console.WriteLine($"{prefix}: Employee.Id   : {e007FromCache.Id}");
        Console.WriteLine($"{prefix}: Employee.Age  : {e007FromCache.Age}{Environment.NewLine}");
    }

Элементы можно сохранять в кэше и извлекать из него с помощью методов StringSetAsync и StringGetAsync.

В примере видно, что ключ Message имеет значение. Приложение обновило кэшированное значение. Кроме того, оно выполнило команду PING.

Работа с объектами .NET в кэше

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

Кэш Azure для Redis может кэшировать и .NET-объекты, и примитивные типы данных, но прежде чем объект .NET можно будет кэшировать, его нужно сериализовать.

За сериализацию объекта .NET отвечает разработчик приложения, что дает ему свободу в выборе сериализатора.

В файле Program.cs был определен следующий класс Employee, чтобы в примере также можно было показать, как получить и задать сериализованный объект:

class Employee
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public Employee(string id, string name, int age)
        {
            Id = id;
            Name = name;
            Age = age;
        }
    }

Запуск примера

Если вы открыли какие-либо файлы, сохраните их и создайте приложение с помощью следующей команды:

dotnet build

Запустите приложение с помощью следующей команды, чтобы проверить сериализацию объектов .NET:

dotnet run

Готовое консольное приложение

Очистка ресурсов

При дальнейшем использовании этого краткого руководства созданные ресурсы можно сохранить и использовать их повторно.

В противном случае, если вы закончили работу с примером приложения из краткого руководства, вы можете удалить ресурсы Azure, созданные в текущем руководстве, чтобы избежать ненужных расходов.

Внимание

Удаление группы ресурсов — необратимая операция, и все соответствующие ресурсы удаляются окончательно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если ресурсы для размещения этого примера созданы в имеющейся группе ресурсов, которая содержит другие нужные ресурсы, каждый ресурс можно удалить отдельно в области слева, чтобы не удалять группу ресурсов.

Удаление группы ресурсов

  1. Войдите в портал Azure и выберитеГруппы ресурсов.

  2. Введите имя группы ресурсов в текстовое поле Фильтровать по имени.... В инструкциях в этой статье использовалась группа ресурсов с именем TestResources. В своей группе ресурсов в списке результатов выберите ..., а затем Удалить группу ресурсов.

    Удаление

  3. Вам будет предложено подтвердить операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги