Бөлісу құралы:


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

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

Перейдите к коду

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

Если вы хотите перейти непосредственно к примеру кода, ознакомьтесь с примером краткого руководства по .NET Core на GitHub.

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

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

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

    Sceenshot, показывающий параметр

  2. В области "Начало работы" введите Кэш Azure для Redis в строке поиска. В результатах поиска найдите Кэш Azure для Redis и нажмите кнопку "Создать".

    Снимок экрана: Azure Marketplace с Кэш Azure для Redis в поле поиска и выделена кнопка

  3. На панели "Новый кэш Redis" на вкладке "Основы" настройте следующие параметры для кэша:

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

  5. На вкладке "Сеть" выберите метод подключения, используемый для кэша.

  6. Выберите вкладку "Дополнительно" или нажмите кнопку "Далее".

  7. На панели "Дополнительно" проверьте или выберите метод проверки подлинности на основе следующих сведений:

    Снимок экрана: панель

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

    Внимание

    Для оптимальной безопасности рекомендуется использовать идентификатор Microsoft Entra с управляемыми удостоверениями для авторизации запросов к кэшу, если это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации ключа общего доступа. Дополнительные сведения об использовании управляемых удостоверений с кэшем см. в разделе "Использование идентификатора Microsoft Entra для проверки подлинности кэша".

  8. (Необязательно) Выберите вкладку "Теги" или нажмите кнопку "Далее: теги".

  9. (Необязательно) На вкладке "Теги" введите имя и значение тега, если вы хотите классифицировать ресурс кэша.

  10. Нажмите кнопку Просмотреть и создать.

    На вкладке "Проверка и создание " Azure автоматически проверяет конфигурацию.

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

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

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

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

  • Чтобы получить ключ доступа для кэша, выполните приведенные далее действия.

    1. В портал Azure перейдите в кэш.
    2. В меню службы в разделе "Параметры" выберите "Проверка подлинности".
    3. На панели проверки подлинности перейдите на вкладку "Ключи доступа".
    4. Чтобы скопировать значение ключа доступа, щелкните значок копирования в поле ключа.

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

  • Чтобы получить имя узла и порты для кэша, выполните следующие действия.

    1. В портал Azure перейдите в кэш.
    2. В меню службы выберите "Обзор".
    3. В разделе Essentials для имени узла щелкните значок "Копировать", чтобы скопировать значение имени узла. Значение имени узла имеет форму <DNS name>.redis.cache.windows.net.
    4. Для портов щелкните значок копирования , чтобы скопировать значения портов.

    Снимок экрана: поиск и копирование имени узла и портов для экземпляра Кэш Azure для Redis.

Запишите значения для ИМЕНИ УЗЛА и первичного ключа доступа. Эти значения используются позже для создания секрета CacheConnection .

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

В окне командной строки выполните следующую команду, чтобы сохранить новый секрет с именем CacheConnection. Замените заполнители (включая угловые скобки) именем кэша (<cache name>) и первичным ключом доступа (<primary-access-key>):

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 и код в репозитории 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. Выберите группу ресурсов для удаления.

    Если в фильтре для любого поля существует много групп ресурсов, введите имя созданной группы ресурсов для выполнения этой статьи. В списке результатов поиска выберите группу ресурсов.

    Снимок экрана: список групп ресурсов для удаления.

  3. Выберите команду Удалить группу ресурсов.

  4. В области "Удалить группу ресурсов" введите имя группы ресурсов, чтобы подтвердить, и нажмите кнопку "Удалить".

    Снимок экрана: поле, требующее ввода имени ресурса для подтверждения удаления.

В течение нескольких минут группа ресурсов и все его ресурсы удаляются.