Uso de cache em aplicações web

Luiz Schons
5 min readSep 12, 2023

--

Hoje em dia, com o avanço da tecnologia, é possível criar aplicações web que são capazes de atender milhares de requisições por segundo. Porém, para que isso seja possível, é necessário que a aplicação seja otimizada para que o tempo de resposta seja o menor possível. Uma das formas de otimizar uma aplicação é utilizando cache.

O que é cache?

Cache é um mecanismo de armazenamento temporário de dados. Ele é utilizado para que o acesso a esses dados seja mais rápido, pois o cache fica armazenado em uma memória mais rápida do que a memória principal. Porém, o cache é um espaço limitado, então ele só armazena os dados que são mais acessados.

Como funciona o cache?

Basicamente, o cache funciona da seguinte forma: quando um dado é acessado pela primeira vez, ele é armazenado no cache. Quando esse dado é acessado novamente, ele é retornado do cache, sem a necessidade de acessar o local onde ele está armazenado originalmente. Isso faz com que o tempo de resposta seja menor.

Bala de prata?

Apesar de ser uma ótima forma de otimizar uma aplicação, o cache não é uma bala de prata. Ele não é capaz de resolver todos os problemas de performance de uma aplicação. Por exemplo, se o cache for mal utilizado, ele pode acabar piorando a performance da aplicação e até mesmo causando problemas de segurança.

Ferramentas

Existem diversas ferramentas que podem ser utilizadas para implementar cache em uma aplicação web. Algumas delas são:

Cada uma dessas ferramentas tem suas vantagens e desvantagens, e a escolha de qual utilizar vai depender do contexto da aplicação.

A mais utilizada é o Redis, que é um banco de dados NoSQL em memória. Ele é muito rápido e possui diversas estruturas de dados que podem ser utilizadas para armazenar os dados em cache.

Banco de dados em memória?

Sim, o Redis é um banco de dados em memória. Isso significa que os dados armazenados nele não são persistidos em disco, ou seja, salvo na memória principal do computador. Por isso, é necessário ter cuidado ao utilizar o Redis, pois se o computador for desligado, os dados armazenados nele serão perdidos, a menos que seja configurado para persistir os dados em disco, mas isso é assunto para outro artigo.

Situações em que o cache pode ser utilizado

O cache pode ser utilizado em diversas situações, como por exemplo:

Cache de sessão

Quando um usuário faz login em uma aplicação web, é necessário que o servidor armazene as informações da sessão desse usuário, para que ele não precise fazer login novamente a cada requisição. Porém, se a aplicação tiver milhares de usuários, armazenar as informações de sessão de todos eles pode acabar consumindo muita memória do servidor. Para evitar isso, é possível armazenar as informações de sessão em um banco de dados em memória, como o Redis.

Cache de dados

Quando uma aplicação web precisa acessar um banco de dados, ela faz uma requisição ao banco de dados, que retorna os dados solicitados. Porém, se esses dados forem acessados com muita frequência, é possível armazená-los em um cache para que eles sejam retornados mais rapidamente. Dessa forma, a aplicação não precisa acessar o banco de dados toda vez que precisar desses dados, isso faz com que o tempo de resposta seja menor, o custo de consulta ao banco de dados seja reduzido e a carga no banco de dados seja menor.

Cache de arquivos

Servir arquivos estáticos, como imagens, CSS e JavaScript, é uma das tarefas mais comuns de uma aplicação web. Porém, se esses arquivos forem acessados com muita frequência, é possível armazená-los em um cache para que eles sejam retornados mais rapidamente. Dessa forma, a aplicação não precisa acessar o disco toda vez que precisar desses arquivos, isso faz com que o tempo de resposta seja menor e a carga no disco seja menor. Existem diversas formas de fazer isso, como por exemplo:

  • Utilizar um servidor de arquivos estáticos, como o Nginx, para servir esses arquivos.
  • Utilizar um CDN (Content Delivery Network) para servir esses arquivos.
  • Utilizar um serviço de armazenamento em nuvem, como o Amazon S3, para armazenar esses arquivos.

Quando não utilizar cache?

Como dito anteriormente, o cache não é uma bala de prata. Usar em excesso pode acabar prejudicando o seu software.

Vou citar alguns exemplos de quando não utilizar cache:

Dados que são atualizados com frequência

Se os dados que estão sendo armazenados em cache são atualizados com muita frequência, o cache pode acabar ficando desatualizado, o que pode causar problemas na aplicação. Por exemplo, se o cache estiver armazenando dados de um usuário, e esses dados forem atualizados, o cache ficará desatualizado, e a aplicação pode acabar retornando dados incorretos.

Nesses casos, é necessário invalidar o cache quando os dados forem atualizados. Isso pode ser feito de diversas formas, como por exemplo:

Invalidação manual

A invalidação manual é quando o cache é invalidado manualmente, ou seja, quando o desenvolvedor decide que o cache deve ser invalidado. Isso pode ser feito de diversas formas, como por exemplo utilizando um comando no terminal, ou utilizando uma interface gráfica.

Invalidação automática por tempo

A invalidação automática por tempo é quando o cache é invalidado automaticamente após um determinado tempo. Isso pode ser feito atraves de um timestamp, ou seja, quando o cache for criado, é armazenado o timestamp de quando ele foi criado, e quando o cache for acessado, é verificado se o timestamp é maior do que o tempo de vida do cache, se for, o cache é invalidado.

Invalidação automática por evento

A invalidação automática por evento é quando o cache é invalidado automaticamente quando um determinado evento ocorre, como por exemplo quando um dado é atualizado ou inserido no banco de dados.

Dados que não são acessados com frequência

Se os dados que estão sendo armazenados em cache não são acessados com frequência, o cache pode acabar ocupando espaço desnecessário na memória, o que pode causar problemas na aplicação. Isso pode acontecer, por exemplo, quando o cache é armazenado em um banco de dados em memória, como o Redis, e o espaço de memória do servidor é limitado.

Dados que são muito grandes

Dados de tamanho elevado podem acabar pesando muito o cache, o que pode deixar sua aplicação lenta. Nesses casos, é necessário avaliar se realmente vale a pena armazenar esses dados em cache ou fazer uma tela de loading para que o usuário aguarde o carregamento desses dados.

Conclusão

Como foi visto, o cache é uma ótima forma de otimizar uma aplicação web, porém, é necessário ter cuidado ao utilizá-lo, pois se for mal utilizado, ele pode acabar piorando a performance da aplicação e até mesmo causando problemas de segurança.

Uma boa prática é utilizar um serviço de monitoramento de cache, como o RedisInsight, para monitorar o cache e verificar se ele está sendo utilizado corretamente.

Existem diversas ferramentas que podem ser utilizadas para monitorar sua aplicação, como por exemplo:

Espero que esse artigo tenha sido útil para você. Se tiver alguma dúvida ou sugestão, deixe um comentário abaixo.

--

--