Inicio rápido: Uso de Azure Cache for Redis con .NET Core
En este inicio rápido incorporará Azure Redis Cache en una aplicación .NET Core para acceder a una caché dedicada y segura, a la que se puede acceder desde cualquier aplicación de Azure. Concretamente, usará el cliente StackExchange.Redis con código C# en una aplicación de consola de .NET Core.
Ir al código en GitHub
Clone el repositorio https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet-core en GitHub.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- SDK de .NET Core
Creación de una caché
Para crear una caché, inicie sesión en Azure Portal. En el menú de Azure Portal, seleccione Crear un recurso.
En el panel Comenzar, escriba Azure Cache for Redis en la barra de búsqueda. En los resultados de la búsqueda, encuentre Azure Cache for Redis y, a continuación, seleccione Crear.
En el panel Nueva Redis Cache, en la pestaña Aspectos básicos, configure las siguientes opciones para la memoria caché:
Configuración Acción Descripción Suscripción Seleccione la suscripción a Azure. La suscripción que se va a usar para crear la nueva instancia de Azure Cache for Redis. Grupo de recursos Seleccione un grupo de recursos o Crear nuevo, y escriba un nombre nuevo para el grupo de recursos. Nombre del grupo de recursos en el que se va a crear la memoria caché y otros recursos. Al colocar todos los recursos de la aplicación en un grupo de recursos, puede administrarlos o eliminarlos fácilmente. Nombre DNS Escriba un nombre único. El nombre de caché debe ser una cadena de 1 a 63 caracteres que contenga solo números, letras y guiones. El nombre debe comenzar y terminar por un número o una letra y no puede contener guiones consecutivos. El nombre de host de la instancia de caché es \<DNS name>.redis.cache.windows.net
.Ubicación Seleccione una ubicación. Una región de Azure cercana a otros servicios que usan la memoria caché. SKU de la caché Seleccione una SKU. La SKU determina los parámetros de tamaño, rendimiento y característica que están disponibles para la memoria caché. Para más información, consulte la introducción a Azure Cache for Redis. Tamaño de la caché Seleccione un tamaño de caché. Para más información, consulte la introducción a Azure Cache for Redis. Seleccione la pestaña Redes o Siguiente: Redes.
En la pestaña Redes, seleccione un método de conectividad que se usará para la memoria caché.
Seleccione la pestaña Opciones avanzadas o Siguiente: Opciones avanzadas.
En el panel Opciones avanzadas, compruebe o seleccione un método de autenticación en función de la siguiente información:
- De manera predeterminada, para una nueva caché Básica, Estándar o Premium, la Autenticación de Microsoft Entra está habilitada y la Autenticación de claves de acceso está deshabilitada.
- Para las cachés Básica o Estándar, puede elegir la selección de un puerto que no sea TLS.
- Para las cachés Estándar y Premium, puede habilitar las zonas de disponibilidad. No puede deshabilitar las zonas de disponibilidad una vez creada la caché.
- En el caso de una caché Premium, configure las opciones para un puerto que no sea TLS, la agrupación en clústeres, la identidad administrada y la persistencia de datos.
Importante
Para obtener una seguridad óptima, se recomienda usar Microsoft Entra ID con identidades administradas para autorizar solicitudes en la memoria caché, si es posible. La autorización mediante Microsoft Entra ID y las identidades administradas proporciona una seguridad y facilidad de uso superiores a la autorización mediante claves de acceso compartidas. Para más información sobre el uso de identidades administradas con la memoria caché, consulte Uso de Microsoft Entra ID para la autenticación de caché.
(Opcional) Seleccione la pestaña Etiquetas o Siguiente: Etiquetas.
(Opcional) En la pestaña Etiquetas, escriba un nombre de etiqueta y un valor si desea clasificar el recurso de caché.
Seleccione el botón Revisar y crear.
En la pestaña Revisar y crear, Azure valida automáticamente la configuración.
Tras aparecer el mensaje verde Validación superada, seleccione Crear.
Se produce una nueva implementación de caché durante varios minutos. Puede supervisar el progreso de la implementación en el panel Información general de Azure Cache for Redis. Cuando Estado muestra En ejecución, la memoria caché está lista para usarse.
Habilitación de la autenticación de Microsoft Entra ID en la memoria caché
Si tiene una memoria caché, compruebe si se ha habilitado la autenticación de Microsoft Entra. Si no es así, habilítela. Se recomienda usar Microsoft Entra ID para las aplicaciones.
En Azure Portal, seleccione la instancia de Azure Cache for Redis en la que desea usar la autenticación basada en tokens de Microsoft Entra.
Seleccione Autenticación en el menú Recurso.
Actualice el panel de trabajo para ver si está activada Habilitar la autenticación de Microsoft Entra. Si es así, puede continuar.
Seleccione Habilitar autenticación de Microsoft Entra y escriba el nombre de un usuario válido. Al usuario que escriba se le asigna automáticamente una directiva de acceso del propietario de datos de forma predeterminada al seleccionar Guardar. También puede escribir una identidad administrada o una entidad de servicio para conectarse a la instancia de caché.
Se muestra un cuadro de diálogo emergente en el que se le pregunta si desea actualizar la configuración e informa de que tarda varios minutos. Seleccione Sí.
Importante
Una vez completada la operación de habilitación, los nodos de la instancia de caché se reinician para cargar la nueva configuración. Se recomienda realizar esta operación durante la ventana de mantenimiento o fuera del horario comercial pico. Esta operación puede tardar hasta 30 minutos.
Para obtener información sobre el uso de Microsoft Entra ID con la CLI de Azure, consulte las páginas de referencias para la identidad.
Anote el NOMBRE DE HOST. Usará estos valores más adelante para appsettings.json.
Adición de un secreto local para la cadena de conexión
En el archivo appsettings.json, agregue lo siguiente:
{
"RedisHostName": "your_Azure_Redis_hostname"
}
Reemplace "your_Azure_Redis_hostname" por el nombre de host y los números de puerto de Azure Redis. Por ejemplo:
cache-name.region.redis.azure.net:10000
para Azure Managed Redis (versión preliminar) ycache-name.redis.cache.windows.net:6380
para los servicios de Azure Cache for Redis.Guarde el archivo.
Conectar a la caché con RedisConnection
En RedisConnection.cs
, verá que el espacio de nombres StackExchange.Redis
se ha agregado al código. Esto es necesario para la clase RedisConnection
.
using StackExchange.Redis;
El código RedisConnection
garantiza que siempre haya una conexión en buen estado a la memoria caché mediante la administración de la instancia ConnectionMultiplexer
desde StackExchange.Redis
. La clase RedisConnection
vuelve a crear la conexión cuando se pierde una conexión y no se puede volver a conectar automáticamente.
Para obtener más información, consulte StackExchange.Redis y el código en un repositorio de GitHub.
Ejecución de comandos de caché
En program.cs
, puede ver el código siguiente para el método RunRedisCommandsAsync
en la clase Program
para la aplicación de consola:
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}");
}
Los elementos en la memoria caché se pueden almacenar y recuperar mediante los métodos StringSetAsync
y StringGetAsync
.
En el ejemplo, puede ver que la clave Message
está establecida en valor. La aplicación actualizó ese valor almacenado en caché. La aplicación también ejecutó el comando PING
.
Trabajar con objetos .NET en la memoria caché
El servidor Redis almacena la mayoría de los datos como cadenas, pero estas cadenas pueden contener muchos tipos de datos, como por ejemplo datos binarios serializados, que se pueden usar cuando se almacenan objetos .NET en caché.
Azure Redis Cache puede almacenar en caché objetos .NET así como tipos de datos primitivos, pero antes de poder almacenar en caché un objeto .NET, se debe serializar.
La serialización del objeto .NET es responsabilidad del desarrollador de la aplicación, que tiene total flexibilidad a la hora de elegir el serializador.
La siguiente clase Employee
se definió en Program.cs para que el ejemplo también pudiera mostrar cómo obtener y establecer un objeto serializado:
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;
}
}
Ejecución del ejemplo
Si se han abierto archivos, guárdelos y compile la aplicación con el siguiente comando:
dotnet build
Ejecute la aplicación con el siguiente comando para comprobar la serialización de objetos .NET:
dotnet run
Limpieza de recursos
Si desea seguir usando los recursos que creó en este artículo, mantenga el grupo de recursos.
De lo contrario, si ya ha terminado con los recursos, puede eliminar el grupo de recursos de Azure que ha creado para evitar cargos.
Importante
La eliminación de un grupo de recursos es irreversible. Cuando elimine un grupo de recursos, todos los recursos contenidos en él se eliminan permanentemente. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si ha creado los recursos en un grupo de recursos existente que contiene recursos que desea conservar, puede eliminar cada recurso individualmente en lugar de eliminar el grupo de recursos.
Para eliminar un grupo de recursos
Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
Seleccione el grupo de recursos que desea eliminar.
Si hay muchos grupos de recursos, use el cuadro Filtro para cualquier campo... y escriba el nombre del grupo de recursos que creó para este artículo. Seleccione el grupo de recursos en la lista de resultados.
Seleccione Eliminar grupo de recursos.
Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y, después, seleccione Eliminar.
Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.