📊 Capítulo 14: Caching Distribuído com Redis
Especialização Backend com Java 21 & Spring Boot 3
🗺️ O Padrão Cache-Aside (Lazy Loading) com Redis
sequenceDiagram
autonumber
actor C as Cliente HTTP
participant S as ProdutoService (@Cacheable)
participant R as Redis Cache Server
participant DB as PostgreSQL / MySQL
C->>S: buscarProdutoPorId(10)
S->>R: GET "produtos::10"
alt Cache Hit (Dado existe no Redis)
R-->>S: Retorna JSON do Produto
S-->>C: Resposta em < 2 ms ⚡
else Cache Miss (Dado não existe)
R-->>S: Retorna null
S->>DB: SELECT * FROM tb_produtos WHERE id = 10
DB-->>S: Retorna Registro do Banco (80 ms)
S->>R: SETEX "produtos::10" (TTL 10 min)
S-->>C: Retorna Produto ao Cliente
end
🎯 Slide 1: Anotações da Abstração de Cache do Spring
-
@EnableCaching: Habilita o processamento de proxies de cache na aplicação. -
@Cacheable(value = "produtos", key = "#id"): Retorna do cache se existir; caso contrário, executa o método e popula o cache. -
@CachePut: Atualiza o cache com o novo valor retornado pelo método sem pular a execução. @CacheEvict(value = "produtos", allEntries = true): Remove entradas do cache ao deletar ou alterar dados.
🎯 Slide 2: Configurando TTL (Time-To-Live) e Serialização JSON
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(15)) // Expiração automática para evitar dados obsoletos
.disableCachingNullValues()
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(
new GenericJackson2JsonRedisSerializer()
)
);
}
🎯 Slide 3: Proteção Contra Falhas de Cache
-
Cache Stampede: Múltiplas requisições consultam o banco simultaneamente quando uma chave expira (use
sync = trueno@Cacheable). - Resiliência: Se o Redis cair, a aplicação deve logar o erro e buscar no banco diretamente sem quebrar a requisição do usuário.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim