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


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

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

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

Клонируйте репозиторий из Azure-Samples/azure-cache-redis-samples на 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. Когда отображается состояние выполнения, кэш готов к использованию.

Включение проверки подлинности идентификатора Microsoft Entra в кэше

Если у вас есть кэш, проверьте, включена ли проверка подлинности Microsoft Entra. Если нет, включите его. Мы рекомендуем использовать идентификатор Microsoft Entra для приложений.

  1. В портал Azure выберите экземпляр Кэш Azure для Redis, где вы хотите использовать проверку подлинности на основе токена Microsoft Entra.

  2. Выберите проверку подлинности в меню "Ресурс".

  3. Проверьте, установлен ли флажок включить проверку подлинности Microsoft Entra. В этом случае можно двигаться дальше.

  4. Выберите "Включить проверку подлинности Microsoft Entra" и введите имя допустимого пользователя. По умолчанию при нажатии кнопки "Сохранить" пользователь, который вы вводите, автоматически назначается политика доступа владельца данных. Вы также можете ввести управляемое удостоверение или субъект-службу для подключения к экземпляру кэша.

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

  5. Всплывающее диалоговое окно отображает запрос на обновление конфигурации и информирование о том, что требуется несколько минут. Выберите Да.

    Внимание

    После завершения операции включения узлы в экземпляре кэша перезагружается для загрузки новой конфигурации. Мы рекомендуем выполнить эту операцию во время периода обслуживания или за пределами пиковых рабочих часов. Операция может занять до 30 минут.

Сведения об использовании идентификатора Microsoft Entra с Azure CLI см. на страницах ссылок для удостоверений.

  1. Измените файл конфигурации App.config и добавьте следующее содержимое:

    <appSettings>
    
    <add key="RedisHostName" value="your_redis_cache_hostname"/>
    
```
  1. Замените "your_Azure_Redis_hostname" именем узла и номерами портов Azure Redis. Например, cache-name.eastus.redis.azure.net:10000 для Кэш Azure для Redis Enterprise и cache-name.redis.cache.windows.net:6380 для служб Кэш Azure для Redis.

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

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

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

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

    Install-Package Microsoft.Azure.StackExchangeRedis
    
  2. Когда установка завершится, клиент кэша StackExchange.Redis станет доступным для использования в проекте.

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

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

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

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

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

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

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

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

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

    Install-Package system.text.json
    

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

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;
    }
}

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

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

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

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

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

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

Внимание

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

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

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

  2. Выберите группу ресурсов, которую нужно удалить.

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

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

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

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

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

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

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