Forem

Cover image for Melhorando a Performance de uma Aplicação Spring Boot com Cache Usando Redis
Gervásio Artur
Gervásio Artur

Posted on

Melhorando a Performance de uma Aplicação Spring Boot com Cache Usando Redis

O uso de cache pode melhorar significativamente o desempenho da sua aplicação, reduzindo a carga nos recursos do sistema e acelerando o tempo de resposta. Aqui, compartilho uma abordagem simples e eficaz para implementar cache em uma aplicação Spring Boot usando Redis.

Configuração do Redis Localmente

O primeiro passo é rodar o Redis na sua máquina. Para isso, você pode usar um arquivo docker-compose para facilitar a configuração. Alternativamente, você pode optar por um serviço de Redis online.

docker-compose.yml

version: '3.1'

services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
Enter fullscreen mode Exit fullscreen mode

Rodando o docker compose:

docker compose up
Enter fullscreen mode Exit fullscreen mode

Configuração na Aplicação

  1. Adicionar a Dependência no pom.xml.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Enter fullscreen mode Exit fullscreen mode
  1. Adicionar Configurações no application.properties.
## CONFIGURING CACHE
spring.cache.type=redis
spring.data.redis.url=${SPRING_DATA_REDIS_URL:redis://localhost:6379/0}
spring.data.redis.host=${SPRING_DATA_REDIS_HOST:localhost}
spring.data.redis.database=${SPRING_DATA_REDIS_DATABASE:1}
spring.data.redis.username=${SPRING_DATA_REDIS_USERNAME:default}
spring.data.redis.password=${SPRING_DATA_REDIS_PASSWORD:0199}
spring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}
spring.data.redis.timeout=60000
Enter fullscreen mode Exit fullscreen mode
  1. Habilitar Cache na Classe de Inicialização.
@EnableCaching
@SpringBootApplication
public class WalletWiseApplication {
    public static void main(String[] args) {
        SpringApplication.run(WalletWiseApplication.class, args);
    }
}
Enter fullscreen mode Exit fullscreen mode

Caso de Uso: Cacheando Despesas de um Usuário
📌 Cenário: Queremos cachear as despesas de um usuário específico para otimizar as buscas. Nomeamos o cache como fixed_expenses e usamos o identificador único do usuário como chave.

🔍 Busca Inicial: Quando o método getByUserId é chamado, o sistema verifica se os valores já estão no cache. Se não estiverem, ele busca as informações no banco de dados e alimenta o cache. Nas próximas buscas, as informações estarão no cache, evitando a necessidade de novas consultas ao banco de dados, o que melhora o tempo de execução e o desempenho da aplicação.

Atualizando o Cache
**
**✍️ Novo Cenário:
Se o usuário adicionar uma nova despesa, precisamos atualizar o cache. Para isso, usamos a anotação @CacheEvict no método add, especificando o nome do cache fixed_expenses e a chave correspondente. Isso remove o cache antigo, garantindo que uma nova busca pelo método getByUserId traga as informações mais recentes.

Benefícios

🔄 Desempenho Melhorado: Redução do tempo de resposta.
📉 Menor Carga no Banco de Dados: Menos consultas ao banco.
🚀 Aplicação Mais Rápida e Eficiente: Melhor experiência para o usuário.

💡 Usar o Redis para cache em sua aplicação Spring Boot pode ser um grande diferencial no desempenho da sua aplicação. Com a abordagem certa, você garante que suas informações estejam sempre atualizadas e acessíveis de forma rápida.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay