Краткое руководство. Использование Кэш Azure для Redis с приложением .NET
В этом кратком руководстве описано, как включить Кэш Azure для Redis в приложение .NET для доступа к защищенному выделенному кэшу, доступному из любого приложения в Azure. Вы будете использовать клиент StackExchange.Redis с кодом C# в консольном приложении .NET.
Переход к коду на GitHub
В этой статье описывается, как изменить код для примера приложения, чтобы создать рабочее приложение, которое подключается к Кэш Azure для Redis.
Если вы хотите перейти непосредственно к коду, ознакомьтесь с примером краткого руководства по .NET на сайте GitHub.
Необходимые компоненты
- Подписка Azure. Создать бесплатно
- Visual Studio 2019
- платформа .NET Framework 4 или более поздних версий, необходимых клиенту StackExchange.Redis
Создание кэша
Чтобы создать кэш, войдите в портал Azure. В меню портала выберите "Создать ресурс".
В области "Начало работы" введите Кэш Azure для Redis в строке поиска. В результатах поиска найдите Кэш Azure для Redis и нажмите кнопку "Создать".
На панели "Новый кэш Redis" на вкладке "Основы" настройте следующие параметры для кэша:
Параметр Действие Description Подписка Выберите свою подписку Azure. Подписка, используемая для создания нового экземпляра Кэш Azure для Redis. Группа ресурсов Выберите группу ресурсов или щелкните Создать и введите новое имя группы ресурсов. Имя группы ресурсов, в которой создается кэш и другие ресурсы. Поместив все ресурсы приложения в одну группу ресурсов, вы сможете легко управлять ими и/или удалить их вместе. DNS-имя Введите уникальное имя. Имя кэша должно быть строкой от 1 до 63 символов, содержащих только цифры, буквы и дефисы. Имя должно начинаться и заканчиваться цифрой или буквой и не может содержать более одного дефиса подряд. Имя \<DNS name>.redis.cache.windows.net
узла экземпляра кэша .Местонахождение Выберите расположение. Регион Azure, расположенный рядом с другими службами, используюющими кэш. Номер SKU кэша Выберите номер SKU. Номер SKU определяет размер, производительность и параметры компонентов, доступные для кэша. Дополнительные сведения см. в статье Общие сведения о Кэше Azure для Redis. Объем кэша Выберите размер кэша. Дополнительные сведения см. в статье Общие сведения о Кэше Azure для Redis. Перейдите на вкладку "Сеть" или нажмите кнопку "Далее: сеть".
На вкладке "Сеть" выберите метод подключения, используемый для кэша.
Выберите вкладку "Дополнительно" или нажмите кнопку "Далее".
На панели "Дополнительно" проверьте или выберите метод проверки подлинности на основе следующих сведений:
- По умолчанию для нового кэша "Базовый", "Стандартный" или "Премиум" включена проверка подлинности Microsoft Entra Authentication, а проверка подлинности ключей доступа отключена.
- Для кэшей "Базовый" или "Стандартный" можно выбрать выбранный порт, отличный от TLS.
- Для кэшей уровня "Стандартный" и "Премиум" можно включить зоны доступности. После создания кэша невозможно отключить зоны доступности.
- Для кэша Premium настройте параметры для порта, не относяющегося к TLS, кластеризации, управляемому удостоверению и сохраняемости данных.
Внимание
Для оптимальной безопасности рекомендуется использовать идентификатор Microsoft Entra с управляемыми удостоверениями для авторизации запросов к кэшу, если это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации ключа общего доступа. Дополнительные сведения об использовании управляемых удостоверений с кэшем см. в разделе "Использование идентификатора Microsoft Entra для проверки подлинности кэша".
(Необязательно) Выберите вкладку "Теги" или нажмите кнопку "Далее: теги".
(Необязательно) На вкладке "Теги" введите имя и значение тега, если вы хотите классифицировать ресурс кэша.
Нажмите кнопку Просмотреть и создать.
На вкладке "Проверка и создание " Azure автоматически проверяет конфигурацию.
Когда отобразится сообщение Проверка пройдена зеленого цвета, выберите Создать.
Развертывание нового кэша происходит в течение нескольких минут. Ход развертывания можно отслеживать на панели обзора Кэш Azure для Redis. Когда отображается состояние выполнения, кэш готов к использованию.
Получение имени узла, портов и ключа доступа
Чтобы подключиться к серверу Кэш Azure для Redis, клиент кэша должен иметь имя узла, порты и ключ доступа кэша. Некоторые клиенты могут ссылаться на эти элементы с помощью немного разных имен. Имя узла, порты и ключи можно получить в портал Azure.
Чтобы получить ключ доступа для кэша, выполните приведенные далее действия.
- В портал Azure перейдите в кэш.
- В меню службы в разделе "Параметры" выберите "Проверка подлинности".
- На панели проверки подлинности перейдите на вкладку "Ключи доступа".
- Чтобы скопировать значение ключа доступа, щелкните значок копирования в поле ключа.
Чтобы получить имя узла и порты для кэша, выполните следующие действия.
- В портал Azure перейдите в кэш.
- В меню службы выберите "Обзор".
- В разделе Essentials для имени узла щелкните значок "Копировать", чтобы скопировать значение имени узла. Значение имени узла имеет форму
<DNS name>.redis.cache.windows.net
. - Для портов щелкните значок копирования , чтобы скопировать значения портов.
Создайте файл на компьютере с именем CacheSecrets.config. Поместите его в папку *C:\AppSecrets*.
Измените файл CacheSecrets.config и добавьте содержимое, приведенное ниже.
<appSettings> <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/> </appSettings>
Замените
<host-name>
на имя узла кэша.Замените
<access-key>
первичным ключом для кэша.
Сохраните файл.
Настройка клиента кэша
В этом разделе вы подготовите консольное приложение для использования клиента StackExchange.Redis для .NET.
В Visual Studio выберите Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующую команду в окне консоли диспетчер пакетов:
Install-Package StackExchange.Redis
После завершения установки клиент кэша 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:
Выберите Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов*.
Затем выполните следующую команду в окне консоли диспетчер пакетов:
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.
Предупреждение
Удаление группы ресурсов — процесс необратимый. При удалении группы ресурсов все ресурсы в группе ресурсов удаляются безвозвратно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов с ресурсами, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.
Удаление группы ресурсов
Войдите на портал Azure и щелкните Группы ресурсов.
Выберите группу ресурсов для удаления.
Если в фильтре для любого поля существует много групп ресурсов, введите имя созданной группы ресурсов для выполнения этой статьи. В списке результатов поиска выберите группу ресурсов.
Выберите команду Удалить группу ресурсов.
В области "Удалить группу ресурсов" введите имя группы ресурсов, чтобы подтвердить, и нажмите кнопку "Удалить".
В течение нескольких минут группа ресурсов и все его ресурсы удаляются.