Поделиться через


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

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

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

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

Если вы хотите перейти непосредственно к коду, ознакомьтесь с примером краткого руководства по .NET на сайте 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.

  1. Создайте файл на компьютере с именем CacheSecrets.config. Поместите его в папку *C:\AppSecrets*.

  2. Измените файл CacheSecrets.config и добавьте содержимое, приведенное ниже.

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
    • Замените <host-name> на имя узла кэша.

    • Замените <access-key> первичным ключом для кэша.

  3. Сохраните файл.

Настройка клиента кэша

В этом разделе вы подготовите консольное приложение для использования клиента StackExchange.Redis для .NET.

  1. В Visual Studio выберите Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующую команду в окне консоли диспетчер пакетов:

    Install-Package StackExchange.Redis
    
  2. После завершения установки клиент кэша StackExchange.Redis доступен для использования с проектом.

Подключение к кэшу секретов

В Visual Studio откройте файл app.config, чтобы убедиться, что он содержит appSettings file атрибут, ссылающийся на файл CacheSecrets.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <appSettings file="C:\AppSecrets\CacheSecrets.config"></appSettings>
</configuration>

Никогда не хранить учетные данные в исходном коде. Для простоты в этом примере используется только внешний файл конфигурации с секретами. Гораздо лучше было бы применить Azure Key Vault с сертификатами.

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

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

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


Значение параметра приложения CacheConnection используется для ссылки на кэш строка подключения из портал Azure в качестве параметра пароля.

В RedisConnection.cs пространство имен StackExchange.Redis отображается в виде using инструкции 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 отвечает разработчику приложения. У вас есть некоторая гибкость в выборе сериализатора.

Простой способ сериализации объектов — использовать JsonConvert методы сериализации в System.text.Json.

Добавьте пространство имен System.text.Json в Visual Studio:

  1. Выберите Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов*.

  2. Затем выполните следующую команду в окне консоли диспетчер пакетов:

    Install-Package system.text.json
    

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

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

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

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

Чтобы создать и запустить консольное приложение для тестирования сериализации объектов .NET, нажмите клавиши CTRL+F5.

Снимок экрана: завершенное консольное приложение.

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

Если вы хотите продолжить использовать ресурсы, созданные в этой статье, сохраните группу ресурсов.

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

Предупреждение

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

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

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

  2. Выберите группу ресурсов для удаления.

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

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

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

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

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

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