Rodando Laravel e Redis com Docker em 5 passos

Você pode ir direto ao projeto completo aqui no meu github.

Introdução

O objetivo deste artigo é configurar o Laravel para rodar no Docker com cache do Redis, mas teremos o Mysql também o/

O Laravel é um dos frameworks mais poderosos da linguagem PHP e além de uma curva de aprendizagem muito pequena, você pode construir aplicações muito simples e outras bastante robustas. Tudo depende da sua imaginação 🙂

Redis é uma estrutura de armazenamento de dados em memória. Pode ser utilizado como banco de dados, cache e message bloker. O Redis não armazena apenas strings (quando simplificamos o conceito de chave x valor), mas é capaz de armazenar estruturas de dados mais complexas. Você pode se aprofundar um pouco mais na documentação aqui.

Docker é a salvação dos aflitos. Se você já chorou nas configurações dos seus ambientes de desenvolvimento e até produção, sabe que o Docker impediu a queda de muitos fios de cabelo. De forma bem simplificada, essa ferramenta facilita o gerenciamento da infraestrutura das aplicações, impactando positivamente no processo de criação, manutenção e escala dos serviços.

Requisitos

É necessário ter o Docker instalado em sua máquia. O restante faremos tudo por dentro do container.

Clone o projeto deste tutorial para seguir os passos abaixo.

Arquivos do projeto

Configuração

Passo 1

Acesse a pasta do seu projeto Laravel para configurar o docker-compose.yml . Você pode ver o arquivo completo neste link, mas quero chamar atenção para a configuração do redis. Nós teremos um container separado para ele, veja:

Configuração do Redis
Configuração do Redis
  • Todos os containers fazem parte da mesma rede localhost;
  • O nome do nosso container é app_redis;

No arquivo config/database.php adicionei o redis como uma conexão (dentro do array connections). Ficou assim:

Passo 2

Precisamos configurar o mysql e o redis no arquivo .env . Observe que tanto o DB_HOST quanto o REDIS_HOST são os nomes dos services no nosso docker-compose.yml . Estas informações serão recuperadas e utilizadas no arquivo config/database.php do passo 1.

Arquivo .env com as configurações do mysql e redis
Arquivo .env com as configurações do mysql e redis

Agora acesse um terminal de sua preferência e (de dentro da pasta do projeto) rode o comando: docker-compose up -d .

Listar os Containers Docker com docker ps

Passo 3

Com o Docker rodando lindamente, vamos acessar o container app_laravelcom o comando docker exec -it app_laravel bash e executar as migrations para testar o cache do redis.

Porém antes de mais nada, execute o composer para instalar as dependências. De dentro do container, execute: composer install.

Agora sim, execute as migrations para criar a tabela pessoas: php artisan migrate e execute o seed para popular a tabela com 500 registros: php artisan db:seed.

Fique a vontade para alterar a quantidade de registros a serem adicionados no banco. Acesse o arquivo database/seeders/DatabaseSeeder.php e seja feliz!

Passo 4

Estamos prontos para testar! Acesse as seguintes rotas no seu navegador ou no Postman:

Testes que fiz no Postman:

  • sem cache: 10.47 segundos;
  • com cache: 3,81 segundos;

Passo 5

Vamos recuperar os registros de outra forma, para termos certeza que estamos utilizando o cache do redis.

De dentro do container app_laravel entre no tinker: php artisan tinker e rode os comandos:

use Illuminate\Support\Facades\Redis;
Redis::get('pessoas');
Recuperando o cache do Redis de dentro do Tinker

Vamos acessar diretamente o container do Redis e verificar se nossa chave “pessoas” existe lá. Primeiro saia do container app_laravel e execute:

docker exec -it app_redis redis-cli
EXISTS laravel_database_pessoas

Você pode executar também: KEYS * para listar todas as chaves. Perceba que as chaves possuem um prefixo “laravel_database_” antes da chave que criamos na aplicação, mas isso já está abstraído pela implementação do Redis feita pelo Laravel.

Verificando a existência das chaves criadas pelo Laravel
Verificando a existência das chaves criadas pelo Laravel

Conclusão

As configurações são simples, porém nem sempre ficam claras quando buscamos alguns artigos pela internet. Espero que você faça bom uso destas informações 🙂

Conhecimento é algo que ninguém pode tirar de você e quando é compartilhado não se perde, multiplica.