Caffeine para Java: guia completo com exemplos práticos

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

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

Recommendations