¿Qué es Caffeine?
Caffeine es una biblioteca de alto rendimiento para almacenamiento en caché en el lenguaje Java, diseñada teniendo en cuenta los requisitos modernos de velocidad y eficiencia. Proporciona una caché en memoria con soporte para operaciones asíncronas, expulsión automática de entradas por tiempo o tamaño, así como políticas de desalojo configurables (por ejemplo, basadas en la frecuencia de uso). La biblioteca es totalmente compatible con Java 8 y versiones posteriores, y se utiliza activamente en proyectos grandes, como Spring Framework (a través de Spring Cache).
¿Para qué sirve?
El almacenamiento en caché permite reducir el tiempo de acceso a los datos, disminuir la carga en las bases de datos o API externas, y mejorar la capacidad de respuesta de la aplicación. Caffeine resuelve estas tareas con una sobrecarga mínima: proporciona latencias de submicrosegundos para lectura y escritura, gestiona automáticamente la memoria y permite configurar la caché de forma flexible según los requisitos comerciales específicos. Sin él, tendrías que implementar la caché manualmente usando HashMap y temporizadores, lo cual es complejo y poco fiable.
Instalación
Añade la dependencia a tu archivo 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'Funciones principales
- Expulsión automática: eliminación de entradas por tiempo de vida (expireAfterWrite, expireAfterAccess) o por tamaño (maximumSize, maximumWeight).
- Carga asíncrona: a través de AsyncCache o métodos loadingCache con soporte para CompletableFuture.
- Estadísticas: recopilación de métricas (hit rate, miss rate, evictions) para monitorización.
- Políticas de desalojo: por defecto se utiliza Window TinyLFU (un algoritmo adaptativo cercano al óptimo).
- Seguridad contra null: manejo correcto de valores null.
Ejemplo de código en 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();
// Escritura en la caché cache.put("user:123", "Alice");
// Lectura con carga automática String user = cache.get("user:456", key -> fetchFromDatabase(key)); System.out.println(user); // null o resultado de fetch
// Estadísticas System.out.println(cache.stats().hitRate()); }
private static String fetchFromDatabase(String key) { return "Bob"; // Simulación de consulta a la BD }}Cuándo usarlo
Caffeine es ideal para almacenar en caché los resultados de llamadas a API, datos de bases de datos, cálculos o cualquier operación que se ejecute con frecuencia y tenga un alto costo. Úsalo en aplicaciones web, microservicios, procesos ETL o en cualquier proyecto Java que requiera una caché rápida y fiable. Evita Caffeine si necesitas almacenamiento en caché distribuido (en ese caso, considera Redis o Hazelcast).
También en la biblioteca
Envío de correo electrónico en JavaScript (Node.js): nodemailer, sendgrid, mailgun
Twilio para JavaScript (Node.js): guía completa con ejemplos
Async/Await en Swift: guía completa con ejemplos prácticos