Inicio rápido: uso de Azure Cache for Redis con una aplicación .NET
En este inicio rápido, incorporará Azure Cache for Redis en una aplicación .NET para obtener acceso a una caché segura y dedicada a la que se puede acceder desde cualquier aplicación en Azure. Concretamente, usará el cliente StackExchange.Redis con código C# en una aplicación de consola de .NET.
Ir al código en GitHub
En este artículo se describe cómo modificar el código de una aplicación de ejemplo para crear una aplicación de trabajo que se conecte a Azure Cache for Redis.
Si quiere ir directamente al código, consulte el ejemplo de inicio rápido de .NET en GitHub.
Requisitos previos
- Suscripción a Azure. Crear una cuenta gratuita
- Visual Studio 2019
- .NET Framework 4 o posterior, requisito del cliente StackExchange.Redis
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, seleccioneCrear.
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 seleccione 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 seleccione 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 mayor seguridad y facilidad de uso a través de la autorización de claves de acceso compartido. Para obtener más información sobre el uso de identidades administradas con la memoria caché, consulte Usar Microsoft Entra ID para la autenticación de caché.
(Opcional) Seleccione la pestaña Etiquetas o seleccione 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ñaRevisar 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.
Obtención del nombre de host, los puertos y la clave de acceso
Para conectarse al servidor de Azure Cache for Redis, el cliente de la caché necesita el nombre de host, los puertos y una clave de acceso de la caché. Es posible que algunos clientes utilicen nombres ligeramente diferentes para estos elementos. Puede obtener el nombre de host, los puertos y las claves en Azure Portal.
Para obtener una clave de acceso para la caché:
- En Azure Portal, acceda a la caché.
- En el menú del servicio, en Configuración, seleccione Autenticación.
- En el panel Autenticación, seleccione la pestaña Claves de acceso.
- Para copiar el valor de una clave de acceso, seleccione el icono Copiar en el campo de clave.
Para obtener el nombre de host y los puertos de la memoria caché:
- En Azure Portal, acceda a la caché.
- En el menú del servicio, seleccione Información general.
- En Esenciales, para Nombre de host, seleccione el icono Copiar para copiar el valor del nombre de host. El valor del nombre de host tiene la forma
<DNS name>.redis.cache.windows.net
. - En Puertos, seleccione el icono Copiar para copiar los valores de puerto.
Cree un archivo en el equipo llamado CacheSecrets.config. Colóquelo en la carpeta *C:\AppSecrets*.
Edite el archivo CacheSecrets.config y agregue el contenido siguiente:
<appSettings> <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/> </appSettings>
Reemplace
<host-name>
por su nombre de host de caché.Reemplace
<access-key>
por la clave principal de la caché.
Guarde el archivo.
Configuración del cliente de caché
En esta sección, prepara la aplicación de consola para utilizar el cliente StackExchange.Redis para .NET.
En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del administrador de paquetes. Ejecute el comando siguiente en la ventana de la Consola del Administrador de paquetes:
Install-Package StackExchange.Redis
Una vez finalizada la instalación, el cliente de caché StackExchange.Redis está disponible para su uso con el proyecto.
Conexión a la caché de secretos
En Visual Studio, abra el archivo App.config para comprobar si contiene un atributo appSettings
file
que haga referencia al archivo 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>
Nunca almacene credenciales en el código fuente. Para simplificar este ejemplo, se usa un archivo de configuración externo de secretos. Un enfoque más adecuado sería utilizar Azure Key Vault con certificados.
Conexión a la caché con RedisConnection
La clase RedisConnection
administra la conexión a la caché. En primer lugar, realice la conexión en esta instrucción en Program.cs:
_redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());
El valor de la configuración de aplicación CacheConnection se utiliza para hacer referencia a la cadena de conexión de la caché de Azure Portal como el parámetro de contraseña.
En RedisConnection.cs, el espacio de nombres StackExchange.Redis aparece como una instrucción using
que requiere la clase RedisConnection
:
using StackExchange.Redis;
La clase RedisConnection
garantiza que siempre haya una conexión correcta a la memoria caché. La conexión se administra mediante la instancia de ConnectionMultiplexer
de 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 el repositorio de GitHub StackExchange.Redis.
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.
Esta serialización del objeto .NET es responsabilidad del desarrollador de la aplicación. Tiene cierta flexibilidad para seleccionar el serializador.
Una manera sencilla para serializar objetos es usar los métodos de serialización JsonConvert
de System.text.Json.
Agregue el espacio de nombres System.text.Json en Visual Studio:
Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes*.
Posteriormente, ejecute el comando siguiente en la ventana de la Consola del Administrador de paquetes:
Install-Package system.text.json
La siguiente clase Employee
se definió en Program.cs para que el ejemplo pueda 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 employeeId, string name, int age)
{
Id = employeeId;
Name = name;
Age = age;
}
}
Ejecución del ejemplo
Para compilar y ejecutar la aplicación de consola para probar la serialización de objetos .NET, seleccione Ctrl+F5.
Limpieza de recursos
Si desea seguir usando los recursos que creó en este artículo, mantenga el grupo de recursos.
De lo contrario, para evitar cargos relacionados con los recursos, si ha terminado de usarlos, puede eliminar el grupo de recursos de Azure que creó.
Advertencia
La eliminación de un grupo de recursos es irreversible. Cuando elimine un grupo de recursos, todos los recursos del grupo de recursos 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 tiene recursos que desea conservar, puede eliminar cada recurso individualmente en lugar de eliminar el grupo de recursos.
Eliminación de un grupo de recursos
Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
Seleccione el grupo de recursos que se eliminará.
Si hay muchos grupos de recursos, en Filtro para cualquier campo, escriba el nombre del grupo de recursos que creó para completar este artículo. En la lista de resultados de búsqueda, seleccione el grupo de recursos.
Seleccione Eliminar grupo de recursos.
En el panel Eliminar un grupo de recursos, escriba el nombre del grupo de recursos para confirmar y, a continuación, seleccione Eliminar.
En unos instantes, el grupo de recursos y todos sus recursos se eliminan.