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

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

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

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

Предварительные требования

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

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

    Create a resource is highlighted in the left navigation pane.

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

    On New, Databases is highlighted, and Azure Cache for Redis is highlighted.

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

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

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

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

  7. На вкладке Дополнительно для экземпляра кэша уровня "Базовый" или "Стандартный" установите переключатель, чтобы включить порт, отличный от TLS. Вы также можете выбрать версию Redis, которую хотите использовать, например 4 или 6.

    Redis version 4 or 6.

  8. На вкладке Дополнительно для экземпляра кэша уровня "Премиум" настройте параметры для портов, отличных от TLS, а также кластеризацию и сохраняемость данных. Вы также можете выбрать версию Redis, которую хотите использовать, например 4 или 6.

  9. Выберите вкладку Далее: теги или нажмите в нижней части страницы кнопку Далее: теги.

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

  11. Выберите Проверить и создать. Вы будете перенаправлены на вкладку "Просмотр и создание", где Azure проверит вашу конфигурацию.

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

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

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

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

  • Чтобы получить ключи доступа, в области навигации кэша слева щелкните Ключи доступа.

    Azure Cache for Redis keys

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

    Azure Cache for Redis properties

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

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

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

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

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

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

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

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

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

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

В Visual Studio откройте файл App.config и убедитесь, что он содержит атрибут appSettingsfile, который ссылается на файл 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 в 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.

Console app completed

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

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

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

Важно!

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

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

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

Delete

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

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

Дальнейшие действия