ASP.NET Core implementando cache com REDIS
Conhecendo o Redis
Redis significa REmote DIctionary Server. Diferente de um banco de dados tradicional como MySQL ou Oracle, é categorizado como um banco de dados não relacional, sendo muitas vezes referenciado pela sigla NOSQL (Not Only SQL).
O Redis foi criado por Salvatore Sanfilippo, também conhecido na internet por Antirez, que liberou o Redis em 2009 de forma open-source sob a licença BSD. Uma característica muito importante sobre o Redis é que ele armazena seus dados em memória, embora seja possível persistir os dados fisicamente.
Mas é o fato de o Redis armazenar os dados em memória que o torna extremamente rápido, tanto para escrita como para leitura de dados. Uma outra característica importante é que todos os comandos executados no Redis são atômicos, e isso é garantido pela forma com que o Redis é executado, que é como uma aplicação single-threaded (enquanto um comando está sendo executado, nenhum outro comando será executado).
Salvatore Sanfilippo. Antirez weblog.
Para começarmos iremos criar um projeto do tipo ASP.NET Core Web Application.
Em seguida, selecione o template de API para essa demonstração.
Ao abrirmos a pasta de controllers, o template disponibiliza uma classe que iremos utilizar em nossos exemplos:
Com projeto criado, precisamos adicionar o pacote de armazenamento em cache Redis fornecido pela Microsoft. Você pode fazer isso no console do gerenciador de pacotes executando:
Install-Package Microsoft.Extensions.Caching.Redis
Em seguida, instalaremos o REDIS. Nesse exemplo foi utilizado o versão para Windows 10 disponível: https://github.com/MicrosoftArchive/redism
Feito do download da versão .ZIP basta acessar o diretório descompactado e executar os seguintes comandos via prompt Command favorito:
redis-server.exe
Na imagem a seguir, ferramenta Redis Desktop Manager, utilitário gratuito de gerenciamento desta tecnologia NoSQL, que iremos utilizar em nosso exemplo.
redisdesktop.com
Na imagem a seguir, conexão realizada com server iniciado anteriormente;
Com o pacote Microsoft.Extensions.Caching.Redis e o REDIS devidamente instalado, precisamos adicionar a referência em nossa API.
Para sua configuração, eu codifiquei para localhost, você pode alterar isso para extrair de sua configuração conforme necessário.
AddDistributedRedisCache na verdade adiciona uma interface automagicamente à sua coleção de serviços chamada “IDistributedCache” que você pode usar para definir e recuperar valores. Você pode usar a injeção de dependência do controlador, então em nosso controller ValuesController, adicionamos a referência do Caching Distributed.
Nesse exemplo iremos utilizar o próprio construtor do controller para isso:
Iremos utilizar também o pacote Newtonsoft.Json para facilitar conversão para JSON de nosso retorno. Você pode fazer isso no console do gerenciador de pacotes executando ocomando:
Install-Package Newtonsoft.Json
Na imagem a seguir, criaremos uma classe que irá representar nosso exemplo de categoria.
Com a classe Category criada, iremos deixar apenas um método GET de exemplo com a seguinte implementação:
Ajustaremos também o nome da rota da API para: [Route("api/cacheredis")]
Feita a implantação anterior no contoroller, iremos iniciar o projeto de API e simularmos uma requisição para mesma. Iremos utilizar o aplicativo Postman, disponível em formato de extensão para Google Chrome utilizando a rota definida:
http://localhost:55613/api/cacheredis
Na imagem seguinte, foi utilizado a porta 55613 mas utilize a porta que foi gerada pelo seu IISExpress.
Ao realizar um GET para o endereço, iremos debugar a solicitação realizada. Observe que foi instanciado uma nova Categoria pois não existe objetos salvos;
Serializamos o objeto para salvar como uma String no REDIS.
Retorno da nossa API.
Atualize a arvore do REDIS para aparecer nosso novo objeto.
Realizando novamente uma requisição, obtemos um valor, pois não havia sido criado nenhuma chave anteriormente.
Busca de dados agora vinda do REDIS Key encontrada.
O exemplo abordados neste artigo está disponibilizado no GuitHub
Referências
http://antirez.com/latest/0
https://redis.io/documentation, https://redis.io/commands
Mais leituras sobre REDIS:
Armazenando dados com Redis: https://www.casadocodigo.com.br/products/livro-redis