Caffeine para Java: cache de alto desempenho em memória
O que é e para que serve?
Caffeine é uma biblioteca de cache em memória de alto desempenho escrita em Java. Criada por Ben Manes, é uma das implementações de cache mais rápidas para a JVM. O Caffeine foi projetado para atender às demandas modernas de concorrência e oferece uma API rica para gerenciar o ciclo de vida dos objetos no cache.
Para que serve o Caffeine? Em qualquer aplicação que trabalhe com dados, é comum que as mesmas informações sejam solicitadas repetidamente. Em vez de executar uma operação cara a cada vez (consulta ao banco de dados, chamada de API externa, cálculos complexos), você pode armazenar o resultado em cache. O Caffeine faz isso de forma extremamente eficiente, utilizando o algoritmo W-TinyLFU (Window Tiny Least Frequently Used), que garante alta precisão na remoção de itens e baixíssimo overhead.
A biblioteca é amplamente utilizada em projetos de grande porte como o Spring Framework (a partir da versão 5.0), onde é a implementação padrão de cache. O Caffeine suporta carregamento assíncrono, atualização automática de entradas, estatísticas e diversas estratégias de remoção (por tempo, por tamanho, por referências).
Instalação
O Caffeine é distribuído via Maven Central. Para utilizá-lo, adicione a dependência ao seu pom.xml (Maven) ou build.gradle (Gradle).
Maven
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.1.8</version>
</dependency>
Gradle
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'
Para verificar a versão mais recente, consulte o Maven Central.
Início rápido
Exemplo mínimo de criação e uso do cache Caffeine:
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;
public class QuickStart {
public static void main(String[] args) {
// 1. Cria um cache com tamanho máximo de 100 elementos
// e tempo de vida de 10 minutos após o último acesso
Cache<String, String> cache = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterAccess(10, TimeUnit.MINUTES)
.build();
// 2. Insere um valor
cache.put("key1", "Olá, Caffeine!");
// 3. Obtém o valor
String value = cache.getIfPresent("key1");
System.out.println(value); // Saída: Olá, Caffeine!
// 4. Obtém o valor com função de carregamento (se a chave não existir)
String loadedValue = cache.get("key2", k -> "Carregado: " + k);
System.out.println(loadedValue); // Saída: Carregado: key2
}
}
Principais métodos e classes
Vamos conhecer as classes e métodos essenciais do Caffeine. A classe principal para configuração é Caffeine, e para trabalhar com o cache temos Cache, LoadingCache e AsyncCache.
1. Caffeine.newBuilder()
Assinatura: public static Caffeine<K, V> newBuilder()
O que faz: Cria um novo builder para configurar o cache. Permite definir todos os parâmetros
Também na biblioteca
Aprendizado de Máquina em Java: visão geral das principais bibliotecas para desenvolvimento
Validação de dados em Swift (iOS/macOS): bibliotecas e abordagens
Spring Data JPA para Java: guia completo com exemplos