🧩 Exercícios: Cache Corporativo com Spring Data Redis e @Cacheable
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 14.1 — Habilitação de Cache com @EnableCaching e @Cacheable
Contexto: Habilitação de Cache com @EnableCaching e @Cacheable no contexto de Cache Corporativo com Spring Data Redis e @Cacheable.
Requisitos de Execução:
- Configurar cache com anotação
@Cacheable(value = 'produtos', key = '#id')em método de consulta pesado.
Resultado Esperado
1ª Chamada: Banco consultado | 2ª Chamada: Resultado retornado do cache Redis.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_1_SeuNome - Envie na tarefa:
Atividade Cap 14 - Cache Corporativo com Spring Data Redis e @Cacheable
🔑 Gabarito de Código & Solução Comentada
// ProdutoCacheService.java
package com.empresa.api.service;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class ProdutoCacheService {
@Cacheable(value = "produtos", key = "#id")
public String buscarProdutoPorId(Long id) {
System.out.println("LOG: Consultando banco de dados para ID " + id);
return "Produto " + id;
}
}
🔍 Nível 2: Prática
Problema 14.2 — Invalidação de Cache com @CacheEvict e @CachePut
Contexto: Invalidação de Cache com @CacheEvict e @CachePut no contexto de Cache Corporativo com Spring Data Redis e @Cacheable.
Requisitos de Execução:
- Utilizar
@CacheEvict(value = 'produtos', key = '#id')na atualização para garantir consistência de cache.
Resultado Esperado
Chave de cache purgada imediatamente após atualização da entidade.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_2_SeuNome - Envie na tarefa:
Atividade Cap 14 - Cache Corporativo com Spring Data Redis e @Cacheable
🔑 Gabarito de Código & Solução Comentada
// CacheEvictService.java
package com.empresa.api.service;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
@Service
public class CacheEvictService {
@CacheEvict(value = "produtos", key = "#id")
public void atualizarProduto(Long id, String novoNome) {
System.out.println("LOG: Atualizando produto e invalidando cache.");
}
}
⚡ Nível 3: Integração
Problema 14.3 — Configuração de Serialização JSON com GenericJackson2JsonRedisSerializer
Contexto: Configuração de Serialização JSON com GenericJackson2JsonRedisSerializer no contexto de Cache Corporativo com Spring Data Redis e @Cacheable.
Requisitos de Execução:
- Customizar
RedisCacheConfigurationpara gravar dados em JSON legível com TTL configurado por cache.
Resultado Esperado
RedisCacheManager configurado com TTL de 10 minutos e serializador JSON.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_3_SeuNome - Envie na tarefa:
Atividade Cap 14 - Cache Corporativo com Spring Data Redis e @Cacheable
🔑 Gabarito de Código & Solução Comentada
// RedisConfig.java
package com.empresa.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
@Configuration
public class RedisConfig {
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
}
🏆 Nível 4: Desafio Corporativo
Problema 14.4 — Lock Distribuído com Redisson para Proteção de Concorrência
Contexto: Lock Distribuído com Redisson para Proteção de Concorrência no contexto de Cache Corporativo com Spring Data Redis e @Cacheable.
Requisitos de Execução:
- Implementar lock distribuído com Redisson
rLock.tryLock(5, 10, TimeUnit.SECONDS)para controle de estoque em cluster.
Resultado Esperado
Lock distribuído adquirido e liberado com segurança no cluster Redis.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_4_SeuNome - Envie na tarefa:
Atividade Cap 14 - Cache Corporativo com Spring Data Redis e @Cacheable
🔑 Gabarito de Código & Solução Comentada
// DistributedLockService.java
package com.empresa.api.service;
import org.springframework.stereotype.Service;
@Service
public class DistributedLockService {
public void executarComLock(String lockKey) {
System.out.println("LOG: Lock distribuído adquirido para chave " + lockKey);
// Operação crítica de estoque
System.out.println("LOG: Lock liberado.");
}
}