Introdução ao nosso amigo cache, agora com Spring boot + REDIS.

Carly Christian
4 min readMay 20, 2020

--

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.

--

--

Carly Christian
Carly Christian

Written by Carly Christian

Oi, eu sou o carly. Gosto de falar sobre varios assuntos e visões que tenho sobre o mundo, é isto.

No responses yet