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

Creación de una caché

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

    Crear un recurso está resaltado en el panel de navegación izquierdo.

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

    En Nuevo, están resaltados Bases de datos y Azure Cache for Redis.

  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é es <DNS name>.redis.cache.windows.net.
    Ubicación Desplácese hacia abajo y seleccione una ubicación. Selecciona una región cerca de otros servicios que usan 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: Avanzadas o el botón Siguiente: Avanzadas en la parte inferior de la página para ver la pestaña Avanzadas.

    Captura de pantalla que muestra la pestaña Opciones avanzadas en el panel de trabajo y la opción que se puede seleccionar.

    • En cachés básicas o estándar, cambie la selección a un puerto que no sea TLS. También puede seleccionar si desea habilitar la Autenticación de Microsoft Entra.
    • 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. También puede seleccionar si desea habilitar la Autenticación de Microsoft Entra.
  7. Seleccione el botón Siguiente: Opciones avanzadas o elija el botón Siguiente: Etiquetas situado en la parte inferior de la página.

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

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

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

Se tarda un tiempo en crear una memoria caché. 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, seleccione Autenticación en el menú Recurso. A continuación, seleccione la pestaña Claves de acceso.

    Claves de Azure Redis Cache

  • Para obtener el nombre de host y los puertos de la memoria caché, seleccione Información general en el menú Recurso. El nombre de host tiene el formato <nombre_DNS>.redis.cache.windows.net.

    Propiedades de Azure Redis Cache

Tome nota del NOMBRE DE HOST y de la clave de acceso principal. Usará estos valores más adelante para construir el secreto CacheConnection.

Adición de un secreto local para la cadena de conexión

En la ventana Comandos, ejecute el siguiente comando para almacenar un secreto nuevo denominado CacheConnection después de reemplazar los marcadores de posición (incluidos los corchetes angulares) por el nombre de la caché y la clave de acceso principal:

dotnet user-secrets set CacheConnection "<cache name>.redis.cache.windows.net,abortConnect=false,ssl=true,allowAdmin=true,password=<primary-access-key>"

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: configuration["CacheConnection"].ToString());

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

Aplicación de consola finalizada

Limpieza de recursos

Si sigue usando este inicio rápido, puede mantener los recursos que ha creado 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.

Para eliminar un grupo de recursos

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

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

    Eliminar

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