Introdução ao nosso amigo cache, agora com Spring boot + REDIS.
Fala glr, eu aqui novamente again para publicar o segundo artigo da série “Introdução ao nosso amigo cache”… Então bora-lá.
No artigo anterior, eu falei sobre cache, expliquei o conceito, a utilidade e defini com minhas palavras. Falei também sobre as configurações e uso das anotações para o seu projeto spring boot trabalhar com cache (Local). Se você não leu e quer dar uma olhadinha, acessa aqui.
Agora vamos falar de cache distribuído.
Por quê isso ?
Imagine sua aplicação rodando no servidor. Acessou ela, criou cache. Acessou ela, o cache tava criado, recuperou cache… Lindo né ? Mas e se você tiver 3 instancias da sua aplicação rodando … O cache é local, como que fica agora ? Pensando nisso, temos um “banco” para prover tudo do cache para as instancias da sua aplicação, ou seja, acessar a instancia 1 ou 2 ou 3 não faz diferença pois o cache vai ser provido pelo REDIS (já pode baixar aqui se quiser e instalar na sua máquina seguindo o passo a passo do link, mas se preferir, vou usar o docker, aí é só acompanhar que eu explico logo mais). Respondido o por quê ? (Você que ta lendo, pode questionar tá ? É super bem vindo críticas e sugestões. A idéia aqui é dissiminar conhecimento e aprendizado para todos, inclusive para mim se você quiser dividir sua crítica, dúvida, sugestão ou questionamento).
Eu construi um projeto exemplo para você poder baixar e ver funcionando. Tudo que estamos abordando aqui, foi feito lá e está disponível, só baixar e ser feliz :D.
Quando trabalhamos com cache existem algumas configurações muito importantes, vou tratar em especial aqui do TTL (time-to-live). TTL nada mais é que o tempo de vida do cache. Precisamos entender quanto tempo aquele conjunto de dados deve ficar “vivo” antes de expirar e isso não tem receita de bolo, é fundamental ter um bom entendimento para que não cause problemas e associar claro, as anotações @cacheput e @cacheevict que falei no artigo anterior para gerenciar seu cache.
Para subir um redis você pode baixar e instalar na sua máquina para este exemplo ou baixar o docker e depois baixar uma imagem do redis. O docker merece um artigo aparte, pois vai depender do seu SO para fazer sua instalação, inclusive a versão do seu SO influencia na instalação. Mas de forma geral, você pode baixar aqui para windows 10. Se o seu windows 10 for o home, sugiro ver esse tutorial aqui.
Depois de baixar o docker, vamos baixar a imagem do redis, pois é ela que vamos acessar da nossa aplicação spring boot para cachear e recuperar dados cacheados. O comando no docker para isso é:
docker run — name ctmait-redis -p 6379:6379 -d redis
O comando acima, baixa e cria o container, vinculando na porta padrão do redis 6379 para a porta do docker 6379, além de atribuir ao container o nome ctmait-redis e de rodar em segundo plano o container com “-d” .
No docker, você pode usar “docker ps” para visualizar se o container está rodando. O comando para startar o container é “docker start (nome ou id_do_container)”. Com container rodando você pode ir para o bash do container com o comando:
docker exec -it ctmait-redis bash
aqui vamos vincular o console do docker ao do container “-it” e chamar o console do container passando o *bash* após identificar qual container é “ctmait-redis”.
Agora podemos chamar o cli do redis usando o seguinte comando “redis-cli”. Pronto, agora já estamos dentro do redis-cli e podemos ver tudo referente ao cache. Mas falta configurar a aplicação, então bora lá.
Adcionar a dependência no pom, abaixo o exemplo.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Para configurar sua aplicação spring boot para este exemplo, vamos usar apenas o application.properties. (eu vi alguns artigos e as vezes complicam muito pra quem ta começando, eu não quero dificultar, quero ajudar.)
No seu properties, eu configurei o básico que são: qual o tipo de cache, o IP, a porta, o TTL, se aceita valores null e se usa prefix.
O tipo do cache é redis, o host é o gerado default do docker 192.168.99.100 ou localhost se você instalar o redis na sua máquina e subir ele, o TTL é de acordo com o necessidade e aqui eu coloquei 120000(2 seg), null-values como false e prefix como true (mas eu optei por não utilizar, trouxe apenas para conhecimento). Pode ver o properties completo acessando o projeto exemplo.
Depois de configurada a aplicação e o redis rodando no docker, podemos fazer requisições e verificar pelo redis-cli que está aberto no docker o cache gerado. O comando para ver as chaves geradas pelo redis-cli é “keys *”. Agora é com você, baixar, subir, rodar, fuçar e sabendo o básico ir evoluindo.
Ah, uma dica: Quer ver o comportamento com multiplas instancias ? Então gera um jar, copia e salva em uma pasta a sua escolha. Depois muda a porta no properties e gera um novo jar. Copia o segundo jar e salva na pasta a sua escolha. Agora sobe os dois jar e você vai ver 2 instancias da sua aplicação rodando e acessando o mesmo cache. Para subir um jar, abra o cmd, navegue até a pasta onde colocou os seu jar e use este comando pelo cmd java -jar “nomedojar.jar”, para cada jar abra um cmd.
É isso, simples, básico e direto (embora tenha ficado meio grande rsrsrs)… Espero ter ajudado e que você que ta lendo possa ter ganho algo com essa leitura. Obrigado e até a próxima.
vlw, flw e tmj. \m/
Originally published at https://www.linkedin.com.