Guía completa de Caffeine para Java: ejemplos y uso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Caffeine para Java: caché en memoria de alto rendimiento

¿Qué es y para qué sirve?

Caffeine es una biblioteca de caché en memoria de alto rendimiento escrita en Java. Creada por Ben Manes, es una de las implementaciones de caché más rápidas para la JVM. Caffeine está diseñada teniendo en cuenta los requisitos modernos de concurrencia y ofrece una API completa para gestionar el ciclo de vida de los objetos en la caché.

¿Para qué sirve Caffeine? En cualquier aplicación que maneje datos, es común que los mismos datos se soliciten repetidamente. En lugar de ejecutar una operación costosa cada vez (consulta a base de datos, llamada a una API externa, cálculos complejos), puedes guardar el resultado en la caché. Caffeine lo hace de forma extremadamente eficiente utilizando el algoritmo W-TinyLFU (Window Tiny Least Frequently Used), que garantiza una alta precisión al expulsar elementos y una sobrecarga mínima.

Esta biblioteca se utiliza activamente en proyectos importantes como Spring Framework (desde la versión 5.0), donde es la implementación de caché predeterminada. Caffeine admite carga asíncrona, actualización automática de entradas, estadísticas y múltiples estrategias de expulsión (por tiempo, por tamaño, por referencias).

Instalación

Caffeine se distribuye a través de Maven Central. Para usarlo, agrega la dependencia a tu archivo pom.xml (Maven) o 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 obtener la última versión, consulta Maven Central.

Inicio rápido

Ejemplo mínimo de creación y uso de una caché con Caffeine:

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

import java.util.concurrent.TimeUnit;

public class InicioRapido {
    public static void main(String[] args) {
        // 1. Creamos una caché con un tamaño máximo de 100 elementos
        //    y un tiempo de vida de 10 minutos desde el último acceso
        Cache<String, String> cache = Caffeine.newBuilder()
                .maximumSize(100)
                .expireAfterAccess(10, TimeUnit.MINUTES)
                .build();

        // 2. Guardamos un valor
        cache.put("clave1", "¡Hola, Caffeine!");

        // 3. Obtenemos el valor
        String valor = cache.getIfPresent("clave1");
        System.out.println(valor); // Imprime: ¡Hola, Caffeine!

        // 4. Obtenemos un valor con función de carga (si la clave no existe)
        String valorCargado = cache.get("clave2", k -> "Cargado: " + k);
        System.out.println(valorCargado); // Imprime: Cargado: clave2
    }
}

Métodos y clases principales

Veamos las clases y métodos clave de Caffeine. La clase principal para la configuración es Caffeine, y para trabajar con la caché tenemos Cache, LoadingCache y AsyncCache.

1. Caffeine.newBuilder()

Firma: public static Caffeine<K, V> newBuilder()

Qué hace: Crea un nuevo constructor para configurar la caché. Permite definir todos los parámetros

Recommendations