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
También en la biblioteca
RxJava para Java: guía completa con ejemplos prácticos
Parseo de HTML en Node.js: TOP bibliotecas y ejemplos de código
Machine Learning en Go: revisión de bibliotecas para Golang
Cliente OAuth para Swift (iOS/macOS): biblioteca OAuthSwift