MHDEV

inícioblogportfóliosobre

Redis - O banco de dados em cache

Marcos Henrique

2020-09-17

performance

Olá pessoal! Hoje vim aqui falar sobre um assunto bem legal e útil no back-end, o Redis.

Redis é o que mesmo ?

O redis ( REmote DIctionary Server ou Servidor de Dicionário Remoto ), é um banco de dados fora da curva do tipo NOSQL e que ao invés de armazenar dados em disco como bancos convencionais, armazena da memória ( a conhecida memória RAM ) da máquina onde está hospedando.

Seus benefícios...

A sua dúvida pode ser, quais os benefícios que irei ter com ele ? Para isso eu tenho a resposta, pelo fato do redis estar diretamente na memória do computador sua resposta a requisições é muito mais rápida que a de um HD por exemplo. Quando você abre um programa em seu computador ele está alocado no HD, e por isso demora um certo tempo para ler todos os dados e abri-lo, mas depois você consegue fechar e abrir a guia minimizada sem grandes prejuízos já que o programa está temporariamente alocado na memória.

Teste de velocidade

Nesse teste usei uma api node com dois bancos de dados, o redis e o mongoDB, ambos em um container docker rodando em minha máquina, nesse caso o redis conseguiu ser muito mais rápido que o mongo pelo acesso na memória e não no disco, deixando tudo beeeemm mais rápido, nos dois bancos eu tinha 2 dois registros no formato JSON, no seu caso pode ser que tenha uma diferença, em vários sentidos, mas com isso já da pra ver o poder desse banco de dados!

Além de cache o redis tem outras funções e aplicações, a exemplo traballhar com filas de dados ( envio de email ) e com a possibilidade de ter backups em outros bancos replicados e até mesmo integrar com um disco.

Mas... nem tudo são flores

O redis é excelente para certos aspectos assim como toda linguagem/tecnologia, quando por exemplo você tem uma aplicação com muitas quantidades de dados tem que se lembrar que o armazenamento está em memória ou seja pode lotar muito mais rápido que no caso do disco, se tornando uma aplicação bem mais cara. Além disso como no nosso computador quando fechamos ou desligamos um programa os dados da memória RAM são deletados completamente, diferente do disco que tem como foco deixar dados a longo prazo, ou seja ele não deve ser usado como banco único ou primário, e sim secundário para deixar um determinado processo mais rápido.

Casos de uso

Para te ajudar a decidir se vale a pena ou não ( quase sempre vale ) usar um banco em cache vou expor alguns casos críticos que são bem legais usar o cache.

  • 1° - Envio de emails em massa
  • 2° - Páginas com dados atualizados com menor frequência
  • 3° - Chats de conversas
  • 4° - Stream de vídeos
  • 5° - Dados geoespaciais
  • 6° - Tempo Real
  • 7° - Inteligência Artifical
  • 8° - Armazenamento de sessões

Esses são os principais mas você pode explorar muitas mais aplicações desse banco, dentro das suas restrições é claro.

Para saber mais sobre esse banco indico olhar o site oficial na AWS - Link

Vamos testar na prática ?

Nesse exemplo nós vamos usar na prática nosso querido amigo REDIS!

1° Passo - Para conseguir fazer o projeto é rodar o seguinte comando yarn init -y ou npm init -y para criar a estrutura do projeto e a flag -y para responder as perguntas padrões do projeto e ir direto ao ponto, mas é claro se quiser usar sem a flag não tem nenhum problema :)

2° Passo - Com o projeto criado siga o vídeo abaixo:

Peek 2020-09-19 14-03

Nesse processo instalamos nossas dependências, a mais importante delas é a ioredis, que é responsável por conectar com nosso banco de dados e possibilitar as buscas e salvar os dados da aplicação, e também o express que será responsável por colocar nossa api ativa.

3° Passo - Criação do nosso container docker

docker_logo

O docker é uma forma que nós programadores usamos para não precisar rodar e instalar nossas aplicações/libs diretamente na máquina, evitando mais problemas e a velha frase "Na minha máquina funciona", para instalar e saber mais sobre o docker recomendo este artigo : Link.

Para criar o nosso container rodando o redis é necessário executar alguns comandos:

  • Baixando imagem - docker pull redis
  • Criando um container - docker run --name rd -p 6379:6379 -d redis redis-server --appendonly no
  • Iniciando o container - docker start rd ( Caso queira parar o container docker stop rd )

Depois disso temos nosso container instalado e rodando, pronto para ser usado!

Uma recomendação para você que esteja começando é depois dessa introdução dê uma olhada nos tipos de dados no Redis, pois aqui é apenas um resumo de tudo que é mais legal nele!

4° Passo - Código do projeto ( Busca )

Peek 2020-09-19 14-27

O código você pode encontrar aqui : Link

Nele eu mostro o comando SET que é um comando que usamos para adicionar um valor : client.set('teste', 'Valor') onde tem "teste" é o nome que daremos na nossa "variável" e o "valor" é o valor mesmo que daremos para ele. Porém.... Para ler um valor usamos o GET passando da seguinte forma : client.get('teste').

Com isso ao fazer uma requisição usando o SET e trocando o método do projeto para get:

Peek 2020-09-19 14-39

Aparece o dado que adicionei no banco.

Nesse trecho o código usado no projeto foi esse: Link

No meu caso para fazer a requisição usei o curl, por linha de comando, mas você pode usar o programa que preferir, fazendo na ulr http://localhost:3000/

Bônus

Um segredinho, caso queira testar os comando do redis diretamente sem usar o node ou algo parecido você pode acessar o terminal rodando o docker e colocar o seguinte comando : docker exec -it rd redis-cli

Peek 2020-09-19 14-45

Com isso terá a possibilidade de rodar qualquer comando do redis! Bem legal para se divertir e testar.

E como falei, quando parar o container docker com o redis todos os dados serão apagados, já que estão em memória, mesmo assim tem muitas aplicações legais.

Espero que tenha gostado desse artigo que levou cerca de 3 horas para ser produzido! 😀 Até a próxima!

Se inscreva em nossa newsletter

Receba conteúdo exclusivo semanalmente em sua caixa de email!

Se inscreva

MHDEV

Copyright © 2020 MHDEV by Marcos Henrique. All rights reserved