Início Rápido: Usar o Cache do Azure para Redis no .NET Framework

Neste guia de início rápido, você incorporará o Cache do Azure para Redis a um aplicativo .NET Framework para ter acesso a um cache seguro e dedicado que pode ser acessado de qualquer aplicativo no Azure. Você especificamente usará o cliente StackExchange.Redis com o código C# em um aplicativo de console do .NET.

Pular para o código no GitHub

Clone o repositório de (https://github.com/Azure-Samples/azure-cache-redis-samples/tree/main/quickstart/dotnet em GitHub.

Pré-requisitos

Criar um cache

  1. Para criar um cache, entre no portal do Azure e selecione Criar um recurso.

    Create a resource is highlighted in the left navigation pane.

  2. Na página Novo, selecione Bancos de dados e, em seguida, Cache do Azure para Redis.

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

  3. Na página Novo Cache Redis, defina as configurações para o novo cache.

    Configuração Escolher um valor Descrição
    Assinatura Clique na lista suspensa e selecione sua assinatura. A assinatura na qual essa nova instância do Cache do Azure para Redis será criada.
    Grupo de recursos Clique na lista suspensa e selecione um grupo de recursos ou selecione Criar e insira um novo nome de grupo de recursos. Nome do grupo de recursos no qual o cache e outros recursos serão criados. Ao colocar todos os seus recursos de aplicativos em um só grupo de recursos, você pode gerenciá-los ou excluí-los juntos com facilidade.
    Nome DNS Insira um nome exclusivo. O nome do cache deve conter de 1 a 63 caracteres e incluir somente números, letras ou hifens. O nome precisa começar e terminar com um número ou uma letra e não pode conter hifens consecutivos. O nome do host da instância de cache será <nome DNS>.redis.cache.windows.net.
    Localidade Clique na lista suspensa e selecione uma localização. Selecione uma região perto de outros serviços que usam o seu cache.
    Tipo de cache Clique na lista suspensa e selecione uma camada. A camada determina o tamanho, o desempenho e os recursos disponíveis para o cache. Para obter mais informações, confira Visão geral do Cache do Azure para Redis.
  4. Selecione a guia Rede ou o botão Rede na parte inferior da página.

  5. Na guia Rede, escolha o método de conectividade.

  6. Selecione a guia Próximo: Avançado ou o botão Próximo: Avançado na parte inferior da página para ver a guia Avançado.

    Screenshot showing the Advanced tab in the working pane and the available option to select.

    • Para caches Básico ou Standard, alterne a seleção para uma porta não TLS. Você também pode selecionar se deseja habilitar a Autenticação do Microsoft Entra.
    • Para um cache Premium, defina as configurações para porta não TLS, clustering, identidade gerenciada e persistência de dados. Você também pode selecionar se deseja habilitar a Autenticação do Microsoft Entra.
  7. Selecione a guia Próximo: Marcas ou o botão Próximo: Marcas na parte inferior da página.

  8. Opcionalmente, na guia Marcas, insira o nome e o valor caso deseje categorizar o recurso.

  9. Selecione Examinar + criar. Você será levado para a guia Examinar + criar, na qual o Azure valida sua configuração.

  10. Depois que a mensagem em verde Validação aprovada for exibida, selecione Criar.

A criação do cache demora um pouco. Monitore o progresso na página Visão Geral do Cache do Azure para Redis. Quando o Status for mostrado como Em execução, o cache estará pronto para uso.

Recuperar o nome de host, as portas e as chaves de acesso do portal do Azure

Para conectar seu servidor do Cache do Azure para Redis, o cliente de cache precisa do nome do host, das portas e de uma chave para o cache. Alguns clientes podem se referir a esses itens por nomes um pouco diferentes. Você pode obter o nome do host, as portas e as chaves do portal do Azure.

  • Para obter as chaves de acesso, na navegação à esquerda do cache, selecione Chaves de acesso.

    Azure Cache for Redis keys

  • Para obter o nome do host e as portas, no painel de navegação esquerdo do cache, selecione Propriedades. O nome do host está no formato <nome DNS>.redis.cache.windows.net.

    Azure Cache for Redis properties

  1. Crie um arquivo no seu computador chamado CacheSecrets.config e coloque-o em C:\AppSecrets\CacheSecrets.config.

  2. Edite o arquivo CacheSecrets.config e adicione o seguinte conteúdo:

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
  3. Substitua <host-name> pelo nome do host do cache.

  4. Substitua <access-key> pela chave primária do cache.

  5. Salve o arquivo.

Configurar o cliente de cache

Nesta seção, você prepara o aplicativo de console para usar o cliente StackExchange.Redis para .NET.

  1. No Visual Studio, selecione Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes e execute o comando a seguir na janela do Console do Gerenciador de Pacotes.

    Install-Package StackExchange.Redis
    
  2. Depois que a instalação for concluída, o cliente de cache StackExchange.Redis está disponível para uso com o seu projeto.

Conexão para o cache de segredos

No Visual Studio, abra seu arquivo App.config para verificar se ele contém um atributo appSettingsfile que referencia o arquivo 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 armazene credenciais no código-fonte. Para facilitar essa amostra, usamos um arquivo de configuração de segredos externo. Uma abordagem melhor seria usar o Azure Key Vault com certificados.

Conexão ao cache com RedisConnection

A conexão ao seu cache é gerenciada pela classe RedisConnection. A conexão é feita pela primeira vez nesta instrução a partir de Program.cs:

     _redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());


O valor do appSetting CacheConnection é usado para referenciar a cadeia de conexão do cache do portal do Azure como o parâmetro de senha.

Em RedisConnection.cs, você verá o namespace StackExchange.Redis com a palavra-chave using. Isto é necessário para a classe RedisConnection.

using StackExchange.Redis;

O código RedisConnection garante que sempre haja uma conexão íntegra com o cache gerenciando a instância ConnectionMultiplexer no StackExchange.Redis. A classe RedisConnection recria a conexão quando uma conexão é perdida e não consegue se reconectar automaticamente.

Para obter mais informações, confira StackExchange.Redis e o código em um repositório GitHub.

Executar comandos de cache

Em program.cs, você pode ver o seguinte código para o método RunRedisCommandsAsync na classe Program para o aplicativo de console:

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}");
    }


Os itens de cache podem ser armazenados e recuperados usando os métodos StringSetAsync e StringGetAsync.

No exemplo, você pode ver que a chave Message está definida como valor. O aplicativo atualizou esse valor armazenado em cache. O aplicativo também executou o PING e o comando.

Trabalhar com objetos .NET no cache

O servidor Redis armazena mais dados como cadeias de caracteres, mas essas cadeias de caracteres podem conter muitos tipos de dados, incluindo dados binários serializados, que podem ser usados ao armazenar objetos do .NET no cache.

O Cache do Azure para Redis pode armazenar objetos .NET e tipos de dados primitivos em cache, mas antes que um objeto .NET seja armazenado em cache, ele deve ser serializado.

Essa serialização de objetos .NET é de responsabilidade do desenvolvedor do aplicativo e proporciona ao desenvolvedor a flexibilidade na escolha do serializador.

Uma maneira simples de serializar objetos é usar os métodos de serialização do JsonConvert no System.text.Json.

Adicione o namespace System.text.Json ao Visual Studio:

  1. Selecione Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes*.

  2. Em seguida, execute o seguinte comando na janela Console do Gerenciador de Pacotes.

    Install-Package system.text.json
    

A classe Employee a seguir foi definida em Program.cs para que o exemplo também pudesse mostrar como obter e definir um 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;
    }
}

Execute o exemplo

Pressione Ctrl + F5 para compilar e executar o aplicativo de console para testar a serialização de objetos .NET.

Console app completed

Limpar os recursos

Se você continuar usando este início rápido, poderá manter os recursos criados e reutilizá-los.

Caso contrário, se você não for mais usar o aplicativo de exemplo do início rápido, exclua os recursos do Azure criados neste início rápido para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível, e o grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente o grupo de recursos ou os recursos incorretos. Se tiver criado os recursos para hospedar este exemplo dentro de um grupo de recursos existente que contém recursos que quer manter, exclua cada recurso individualmente à esquerda, em vez de excluir o grupo de recursos.

Entre no portal do Azure e selecione Grupos de recursos.

Na caixa de texto Filtrar por nome... , digite o nome do seu grupo de recursos. As instruções deste artigo usaram um grupo de recursos chamado TestResources. Em seu grupo de recursos, na lista de resultados, selecione ... e então Excluir grupo de recursos.

Delete

Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Digite o nome do grupo de recursos para confirmar e selecione Excluir.

Após alguns instantes, o grupo de recursos, e todos os recursos contidos nele, serão excluídos.

Próximas etapas