Inicio rápido: Uso de Azure Cache for Redis con .NET Framework

En este inicio rápido incorporará Azure Redis Cache en una aplicación .NET Framework 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.

Ir al código en GitHub

Clone el repositorio desde https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet en GitHub.

Requisitos previos

Creación de una caché

  1. Para crear una instancia de caché, inicie sesión en Azure Portal y seleccione Crear un recurso.

    Create a resource is highlighted in the left navigation pane.

  2. En la página Nuevo, seleccione Base de datos y, a continuación, seleccione Azure Cache for Redis.

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

  3. En la página Nueva instancia de Redis Cache, configure las opciones de la nueva caché.

    Configuración Elegir un valor Descripción
    Suscripción Desplácese hacia abajo y seleccione su suscripción. La suscripción en la que se creará esta nueva instancia de Azure Cache for Redis.
    Grupos de recursos Desplácese hacia abajo y 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 van a crear la 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 la memoria caché debe ser una cadena de entre 1 y 63 caracteres, y solo puede contener números, letras o 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é será <nombre DNS>.redis.cache.windows.net.
    Ubicación Desplácese hacia abajo y seleccione una ubicación. Seleccione una región cerca de otros servicios que vayan a usar la memoria caché.
    Tipo de caché Desplácese hacia abajo y seleccione un nivel. El nivel determina el tamaño, rendimiento y características disponibles para la memoria caché. Para más información, consulte la introducción a Azure Redis Cache.
  4. Seleccione la pestaña Redes o elija el botón Redes situado en la parte inferior de la página.

  5. En la pestaña Redes, seleccione el método de conectividad.

  6. Seleccione la pestaña Siguiente: Opciones avanzadas o seleccione el botón Siguiente: Opciones avanzadas en la parte inferior de la página.

  7. En la pestaña Opciones avanzadas de una instancia de caché básica o estándar, seleccione el botón de alternancia de habilitación si desea habilitar un puerto que no sea TLS. También puede seleccionar la versión de Redis que quiere usar, 4 o 6.

    Redis version 4 or 6.

  8. En la pestaña Opciones avanzadas de la instancia de caché Premium, configure el puerto no TLS, la agrupación en clústeres y la persistencia de datos. También puede seleccionar la versión de Redis que quiere usar, 4 o 6.

  9. Seleccione el botón Siguiente: Opciones avanzadas o elija el botón Siguiente: Etiquetas situado en la parte inferior de la página.

  10. Opcionalmente, en la pestaña Etiquetas, escriba el nombre y el valor si desea clasificar el recurso.

  11. Seleccione Revisar + crear. Pasará a la pestaña Revisar y crear, donde Azure validará la configuración.

  12. Tras aparecer el mensaje verde Validación superada, seleccione Crear.

La caché tarda un tiempo en crearse. Puede supervisar el progreso en la página Información general de Azure Cache for Redis. Cuando Estado se muestra como En ejecución, la memoria caché está lista para su uso.

Recuperación del nombre de host, los puertos y las claves de acceso desde Azure Portal

Para conectar el servidor de Azure Cache for Redis, el cliente de dicha caché necesita el nombre de host, los puertos y una clave para 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 de Azure Portal.

  • Para obtener las claves de acceso, en el panel de navegación izquierdo de Azure Cache for Redis, seleccione Claves de acceso.

    Azure Cache for Redis keys

  • Para obtener el nombre de host y los puertos, en el panel de navegación izquierdo de Azure Cache for Redis, seleccione Propiedades. El nombre de host tiene el formato <nombre_DNS>.redis.cache.windows.net.

    Azure Cache for Redis properties

  1. Cree un archivo en el equipo denominado CacheSecrets.config y colóquelo en C:\AppSecrets\CacheSecrets.config.

  2. 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>
    
  3. Reemplace <host-name> por su nombre de host de caché.

  4. Reemplace <access-key> por la clave principal de la caché.

  5. 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.

  1. En Visual Studio, seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes y ejecute el siguiente comando desde la ventana de la consola del administrador de paquetes.

    Install-Package StackExchange.Redis
    
  2. Una vez completada 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 appSettingsfile 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.

Conectar a la caché con RedisConnection

La clase RedisConnection administra la conexión a la caché. La conexión se realiza por primera vez en esta instrucción de 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, verá el espacio de nombres StackExchange.Redis con la palabra clave using. 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.

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 a Visual Studio:

  1. Seleccione Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes*.

  2. A continuación, ejecute el comando siguiente en la ventana "Consola del Administrador de paquetes".

    Install-Package system.text.json
    

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 employeeId, string name, int age)
    {
        Id = employeeId;
        Name = name;
        Age = age;
    }
}

Ejecución del ejemplo

Presione Ctrl+F5 para compilar y ejecutar la aplicación de consola para probar la serialización de objetos .NET.

Console app completed

Limpieza de recursos

Si sigue usando este inicio rápido, puede mantener los recursos creados y reutilizarlos.

En caso contrario, si ya ha terminado con la aplicación de ejemplo de la guía de inicio rápido, puede eliminar los recursos de Azure creados en este tutorial para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible y el grupo de recursos y todos los recursos que contiene se eliminarán de forma permanente. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si ha creado los recursos para hospedar este ejemplo en un grupo de recursos existente que contiene recursos que quiere conservar, puede eliminar cada recurso individualmente en la parte izquierda, en lugar de eliminar el grupo de recursos.

Inicie sesión en Azure Portal y después seleccione Grupos de recursos.

Escriba el nombre del grupo de recursos en el cuadro de texto Filtrar por nombre... . En las instrucciones de este artículo se usa un grupo de recursos llamado TestResources. En el grupo de recursos de la lista de resultados, seleccione ... y, después, Eliminar grupo de recursos.

Delete

Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos los recursos que contiene se eliminan.

Pasos siguientes