Caching in Java mit Caffeine

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Caffeine?

Caffeine ist eine leistungsstarke Caching-Bibliothek für Java, die mit Blick auf moderne Anforderungen an Geschwindigkeit und Effizienz entwickelt wurde. Sie bietet einen In-Memory-Cache mit Unterstützung für asynchrone Operationen, automatische Evakuierung von Einträgen nach Zeit oder Größe sowie konfigurierbare Verdrängungsrichtlinien (z. B. basierend auf der Nutzungshäufigkeit). Die Bibliothek ist vollständig kompatibel mit Java 8 und höher und wird aktiv in großen Projekten wie dem Spring Framework (über Spring Cache) eingesetzt.

Wofür wird sie benötigt?

Caching ermöglicht es, die Zugriffszeit auf Daten zu verkürzen, die Last auf Datenbanken oder externe APIs zu reduzieren und die Reaktionsfähigkeit der Anwendung zu verbessern. Caffeine löst diese Aufgaben mit minimalem Overhead: Es bietet sub-Mikrosekunden-Latenzen für Lese- und Schreibvorgänge, verwaltet den Speicher automatisch und erlaubt eine flexible Konfiguration des Caches an spezifische Geschäftsanforderungen. Ohne sie müssten Sie den Cache manuell mit HashMap und Timern implementieren, was komplex und unzuverlässig ist.

Installation

Fügen Sie die Abhängigkeit zu Ihrer pom.xml-Datei (Maven) hinzu:

<dependency>    <groupId>com.github.ben-manes.caffeine</groupId>    <artifactId>caffeine</artifactId>    <version>3.1.8</version></dependency>

Für Gradle:

implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'

Hauptfunktionen

  • Automatische Evakuierung: Entfernung von Einträgen nach Lebenszeit (expireAfterWrite, expireAfterAccess) oder nach Größe (maximumSize, maximumWeight).
  • Asynchrones Laden: über AsyncCache oder loadingCache-Methoden mit Unterstützung für CompletableFuture.
  • Statistiken: Sammlung von Metriken (Hit Rate, Miss Rate, Evictions) für das Monitoring.
  • Verdrängungsrichtlinien: Standardmäßig wird Window TinyLFU verwendet (ein adaptiver Algorithmus, der nahe am Optimum liegt).
  • Null-Sicherheit: Korrekte Behandlung von null-Werten.

Java-Codebeispiel

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();

// In den Cache schreiben cache.put("user:123", "Alice");

// Lesen mit automatischem Laden String user = cache.get("user:456", key -> fetchFromDatabase(key)); System.out.println(user); // null oder Ergebnis von fetch

// Statistiken System.out.println(cache.stats().hitRate()); }

private static String fetchFromDatabase(String key) { return "Bob"; // Simulation eines Datenbankaufrufs }}

Wann verwenden

Caffeine ist ideal zum Cachen von Ergebnissen von API-Aufrufen, Daten aus der Datenbank, Berechnungen oder beliebigen Operationen, die häufig ausgeführt werden und hohe Kosten verursachen. Verwenden Sie es in Webanwendungen, Microservices, ETL-Prozessen oder in jedem Java-Projekt, das einen schnellen und zuverlässigen Cache benötigt. Vermeiden Sie Caffeine, wenn Sie verteiltes Caching benötigen (dann schauen Sie sich Redis oder Hazelcast an).

Empfehlungen