Início Rápido: usar o Cache do Azure para Redis com um aplicativo .NET
Neste início rápido, você incorporará o Cache do Azure para Redis em um aplicativo .NET para acessar 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
Este artigo descreve como modificar o código de um aplicativo de exemplo para criar um aplicativo funcional que se conecta ao Cache do Azure para Redis.
Se você quiser acessar diretamente o código, consulte a amostra de início rápido do .NET no GitHub.
Pré-requisitos
- Uma assinatura do Azure. Crie um gratuitamente
- Visual Studio 2019
- .NET Framework 4 ou superior, conforme exigido pelo cliente StackExchange.Redis
Criar um cache
Para criar um cache, entre no portal do Azure. No menu do portal, selecione Criar recurso.
Na página Introdução, insira Cache do Azure para Redis na barra de pesquisa. Nos resultados da pesquisa, localize Cache do Azure para Redis e selecione Criar.
No painel Novo Cache Redis, na guia Básico, defina as seguintes configurações para o cache:
Configuração Ação Descrição Assinatura Selecione sua assinatura do Azure. A assinatura a ser usada para criar a instância do Cache do Azure para Redis. Grupo de recursos Selecione um grupo de recursos ou selecione Criar novo e insira um novo nome de grupo de recursos. Um nome para o grupo de recursos em que você criará o cache e outros recursos. 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 precisa ser uma cadeia de caracteres com 1 a 63 caracteres contendo somente números, letras e hifens. O nome deve 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 é \<DNS name>.redis.cache.windows.net
.Localidade Selecione uma localização. Uma região do Azure que esteja próxima a outros serviços que usam o cache. Cache SKU Selecione um SKU. O SKU determina os parâmetros de tamanho, desempenho e recurso disponíveis para o cache. Para obter mais informações, consulte Visão geral do Cache do Azure para Redis. Tamanho do cache Selecione um tamanho de cache. Para obter mais informações, consulte Visão geral do Cache do Azure para Redis. Selecione a guia Rede ou clique em Avançar: rede.
Na guia Rede, selecione um método de conectividade a ser usado para o cache.
Selecione a guia Avançado ou clique em Avançar: avançado.
No painel Avançado, verifique ou selecione um método de autenticação com base nas seguintes informações:
- Por padrão, para um novo cache Básico, Standard ou Premium, a Autenticação do Microsoft Entra está habilitada e a Autenticação de Chaves de Acesso está desabilitada.
- Para caches Básico ou Standard, é possível escolher a seleção de uma porta não TLS.
- Para caches Standard e Premium, é possível optar por habilitar zonas de disponibilidade. Não é possível desabilitar zonas de disponibilidade após a criação do cache.
- Para um cache Premium, defina as configurações para porta não TLS, clustering, identidade gerenciada e persistência de dados.
Importante
Para otimizar a segurança, recomendamos usar o Microsoft Entra ID com identidades gerenciadas a fim de autorizar solicitações no cache, se possível. A autorização usando o Microsoft Entra ID e identidades gerenciadas oferece segurança superior e facilidade de uso em relação à autorização de chave de acesso compartilhada. Para saber como usar as identidades gerenciadas com o cache, confira Usar o Microsoft Entra ID para autenticação de cache.
(Opcional) Selecione a guia Categorias ou clique em Avançar: categorias.
(Opcional) Na guia Categorias, insira um nome e um valor de categoria se você quiser categorizar o recurso de cache.
Selecione o botão Revisar + criar.
Na guia Examinar + criar, o Azure valida a configuração automaticamente.
Depois que a mensagem em verde Validação aprovada for exibida, selecione Criar.
Uma nova implantação de cache ocorre durante diversos minutos. Você pode monitorar o progresso da implantação no painel Visão Geral do Cache do Azure para Redis. Quando o Status mostrar Em execução, o cache estará pronto para uso.
Obter o nome do host, as portas e a chave de acesso
Para se conectar ao servidor do Cache do Azure para Redis, o cliente de cache precisa do nome do host, das portas e de uma chave de acesso do cache. Alguns clientes podem se referir a esses itens usando nomes ligeiramente diferentes. Você pode obter o nome do host, as portas e as chaves no portal do Azure.
Para obter uma chave de acesso para o cache:
- No portal do Azure, acesse o cache.
- No menu de serviço, em Configurações, selecione Autenticação.
- No painel Autenticação, selecione a guia Chaves de acesso.
- Para copiar o valor de uma chave de acesso, selecione o ícone Copiar no campo de chave.
Para obter o nome do host e as portas do cache:
- No portal do Azure, acesse o cache.
- No menu de serviço, selecione Visão geral.
- Em Itens essenciais, selecione o ícone Copiar para copiar o valor do Nome do host. O valor do nome do host tem o formato
<DNS name>.redis.cache.windows.net
. - Para obter as Portas, selecione o ícone Copiar para copiar os valores delas.
Crie um arquivo em seu computador denominado CacheSecrets.config. Coloque-o na pasta *C:\AppSecrets*.
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>
Substitua
<host-name>
pelo nome do host do cache.Substitua
<access-key>
pela chave primária do cache.
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.
No Visual Studio, selecione Ferramentas>Gerenciador de Pacotes do NuGet>Console do Gerenciador de Pacotes. Execute o seguinte comando na janela do console do Gerenciador de Pacotes:
Install-Package StackExchange.Redis
Quando a instalação for concluída, o cliente de cache StackExchange.Redis estará disponível para uso com o projeto.
Conexão para o cache de segredos
No Visual Studio, abra o arquivo App.config para verificar se ele contém um atributo appSettings
file
que faz referência ao 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.
Conecte-se ao cache usando a RedisConnection
A conexão ao seu cache é gerenciada pela classe RedisConnection
. Primeiro, crie a conexão nesta instrução em Program.cs:
_redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());
O valor da configuração do aplicativo CacheConnection é usado para referenciar a cadeia de conexão do cache no portal do Azure como o parâmetro de senha.
Em RedisConnection.cs, o namespace StackExchange.Redis aparece como uma instrução using
que é necessária para a classe RedisConnection
:
using StackExchange.Redis;
O código da classe RedisConnection
garante que sempre haja uma conexão íntegra com o cache. A conexão é gerenciada pela instância ConnectionMultiplexer
do StackExchange.Redis. A classe RedisConnection
recria a conexão quando ela é perdida e não é capaz de se reconectar automaticamente.
Para saber mais, confira StackExchange.Redis e o código no Repositório do GitHub do StackExchange.Redis.
Executar comandos de cache
Em Program.cs, é possível observar o seguinte código para o método RunRedisCommandsAsync
na classe Program
do aplicativo do 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 em cache objetos .NET e tipos de dados primitivos, mas antes que um objeto .NET possa ser armazenado em cache, ele deve ser serializado.
Essa serialização de objetos .NET é de responsabilidade do desenvolvedor do aplicativo. Você tem alguma flexibilidade na escolha do serializador.
Uma maneira simples de serializar objetos é usar os métodos de serialização JsonConvert
em System.text.Json.
Adicione o namespace System.text.Json ao Visual Studio:
Selecione Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes*.
Em seguida, execute o seguinte comando na janela do console do Gerenciador de Pacotes:
Install-Package system.text.json
A seguinte classe Employee
foi definida em Program.cs para que o exemplo possa 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
Para criar e executar o aplicativo do console para testar a serialização de objetos .NET, selecione Ctrl+F5.
Limpar os recursos
Se quiser continuar a usar os recursos que você criou neste artigo, conserve o grupo de recursos.
Para evitar custos relacionados aos recursos, se você já tiver terminado de usá-los, exclua o grupo de recursos do Azure que você criou.
Aviso
A exclusão de um grupo de recursos é irreversível. Ao excluir o grupo de recursos, todos os recursos nele são excluídos permanentemente. Não exclua acidentalmente o grupo de recursos ou os recursos incorretos. Se você criou os recursos em um grupo atual que tem outros recursos que você quer manter, você pode excluir cada recurso individualmente, em vez de excluir o grupo todo.
Excluir um grupo de recursos
Entre no portal do Azure e selecione Grupos de recursos.
Selecione o grupo de recursos a ser excluído.
Se houver muitos grupos de recursos, em Filtrar para qualquer campo, insira o nome do grupo que você criou para concluir as tarefas deste artigo. Na lista de resultados da pesquisa, selecione o grupo de recursos.
Selecione Excluir grupo de recursos.
No painel Excluir um grupo de recursos, insira o nome do grupo para confirmar e clique em Excluir.
Em poucos instantes, o grupo de recursos e todos os recursos nele são excluídos.