Cache em Java com Caffeine

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Caffeine?

Caffeine é uma biblioteca de cache de alto desempenho para Java, projetada com os requisitos modernos de velocidade e eficiência. Ela fornece um cache in-memory com suporte a operações assíncronas, evacuação automática de entradas por tempo ou tamanho, e políticas de despejo configuráveis (por exemplo, baseadas na frequência de uso). A biblioteca é totalmente compatível com Java 8 e superior, e é ativamente usada em grandes projetos, como o Spring Framework (através do Spring Cache).

Para que serve?

O cache permite reduzir o tempo de acesso aos dados, diminuir a carga em bancos de dados ou APIs externas, e aumentar a capacidade de resposta da aplicação. O Caffeine resolve essas tarefas com sobrecarga mínima: ele garante latências de submicrossegundos para leitura e escrita, gerencia automaticamente a memória e permite configurar o cache de forma flexível para requisitos de negócio específicos. Sem ele, você teria que implementar o cache manualmente usando HashMap e timers, o que é complexo e pouco confiável.

Instalação

Adicione a dependência ao seu arquivo pom.xml (Maven):

<dependency>    <groupId>com.github.ben-manes.caffeine</groupId>    <artifactId>caffeine</artifactId>    <version>3.1.8</version></dependency>

Para Gradle:

implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'

Funcionalidades principais

  • Evacuação automática: remoção de entradas por tempo de vida (expireAfterWrite, expireAfterAccess) ou por tamanho (maximumSize, maximumWeight).
  • Carregamento assíncrono: através de AsyncCache ou métodos loadingCache com suporte a CompletableFuture.
  • Estatísticas: coleta de métricas (hit rate, miss rate, evictions) para monitoramento.
  • Políticas de despejo: por padrão, é usado o Window TinyLFU (um algoritmo adaptativo, próximo do ideal).
  • Segurança contra null: tratamento correto de valores null.

Exemplo de código em Java

import com.github.benmanes.caffeine.cache.Cache;import com.github.benmanes.caffeine.cache.Caffeine;

import java.util.concurrent.TimeUnit;

public class CaffeineExample { public static void main(String[] args) { Cache<String, String> cache = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .maximumSize(100) .recordStats() .build();

// Escrita no cache cache.put("user:123", "Alice");

// Leitura com carregamento automático String user = cache.get("user:456", key -> fetchFromDatabase(key)); System.out.println(user); // null ou resultado do fetch

// Estatísticas System.out.println(cache.stats().hitRate()); }

private static String fetchFromDatabase(String key) { return "Bob"; // Simulação de consulta ao BD }}

Quando usar

Caffeine é ideal para armazenar em cache resultados de chamadas de API, dados de banco de dados, cálculos ou qualquer operação que seja executada com frequência e tenha alto custo. Use-o em aplicações web, microsserviços, processos ETL ou em qualquer projeto Java que exija um cache rápido e confiável. Evite o Caffeine se você precisar de cache distribuído (nesse caso, considere Redis ou Hazelcast).

Recommendations