Краткое руководство. Использование Кэш Azure для Redis с приложением .NET Core
В этом кратком руководстве описано, как включить Кэш Azure для Redis в приложение .NET Core для доступа к защищенному выделенному кэшу, доступному из любого приложения в Azure. Вы будете использовать клиент StackExchange.Redis с кодом C# в консольном приложении .NET Core.
Перейдите к коду
В этой статье описывается, как изменить код для примера приложения, чтобы создать рабочее приложение, которое подключается к Кэш Azure для Redis.
Если вы хотите перейти непосредственно к примеру кода, ознакомьтесь с примером краткого руководства по .NET Core на GitHub.
Необходимые компоненты
- Подписка Azure. Создать бесплатно
- Базовый пакет SDK для .NET
Создание кэша
Чтобы создать кэш, войдите в портал 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
. - Для портов щелкните значок копирования , чтобы скопировать значения портов.
Запишите значения для ИМЕНИ УЗЛА и первичного ключа доступа. Эти значения используются позже для создания секрета 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.
Предупреждение
Удаление группы ресурсов — процесс необратимый. При удалении группы ресурсов все ресурсы в группе ресурсов удаляются безвозвратно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов с ресурсами, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.
Удаление группы ресурсов
Войдите на портал Azure и щелкните Группы ресурсов.
Выберите группу ресурсов для удаления.
Если в фильтре для любого поля существует много групп ресурсов, введите имя созданной группы ресурсов для выполнения этой статьи. В списке результатов поиска выберите группу ресурсов.
Выберите команду Удалить группу ресурсов.
В области "Удалить группу ресурсов" введите имя группы ресурсов, чтобы подтвердить, и нажмите кнопку "Удалить".
В течение нескольких минут группа ресурсов и все его ресурсы удаляются.