Otimizando o desempenho com o Output Caching no .NET 7

Existem vários recursos que chamaram minha atenção no .NET 7 e decidi experimentar o Output Caching.

O Output Caching é um middleware que armazena em cache toda a saída de um request, em vez de executar o request por completo sempre que solicitado. Isso torna seus endpoints muito mais performáticos.

Este middleware melhora o desempenho reduzindo a carga em uma API. Ele também pode acelerar as experiências do usuário, pois os dados podem ser fornecidos a partir da memória ou de um cache centralizado, em vez de ter que fazer viagens de ida e volta a um recurso como um banco de dados toda vez que uma API é solicitada.

Pré-requisitos

  • .NET 7.0
  • Visual Studio 2022

Web API

O primeiro passo é configurar o recurso Output Caching conforme a classe program.cs abaixo:

Os métodos AddOutputCache() e UseOutputCache() são responsáveis por configurar o middleware de cache na aplicação.

O método de extensão AddSerilog() contém a configuração de logs da aplicação:

Para habilitar o cache é necessário utilizar o atributo [OutputCache], conforme o endpoint GetCountries() da controller de exemplo (CacheController) abaixo:

Ao registrar o atributo OutputCache, o endpoint passa a utilizar as configurações registradas na classe program.cs, neste caso, o cache terá a duração de 20 segundos.

Testando

Para realizar os testes, execute o endpoint GET /cache/countries no Swagger para obter a lista de países.


Através dos logs gerados no console, é possível entender que na primeira requisição ao endpoint foi executado normalmente, e nas próximas requisições para o mesmo endpoint, o resultado foi retornado pelo cache feito no servidor, conforme a imagem abaixo:


Finalizando

Observando a API no exemplo, vimos que quase não requer código para usar o middleware de cache, embora seja flexível para ser configurada de acordo com suas próprias necessidades.

Este foi um caso de uso básico de utilização do Output Caching, existem diversos cenários em que é possível aproveitar este middleware para obter performance e escalabilidade das aplicações.

Os detalhes completo deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-output-caching

Deixe uma resposta