Mise en cache en Java avec Caffeine

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Caffeine ?

Caffeine est une bibliothèque de mise en cache haute performance pour le langage Java, conçue pour répondre aux exigences modernes de rapidité et d'efficacité. Elle fournit un cache in-memory avec prise en charge des opérations asynchrones, de l'évacuation automatique des entrées basée sur le temps ou la taille, ainsi que des politiques de remplacement personnalisables (par exemple, basées sur la fréquence d'utilisation). La bibliothèque est entièrement compatible avec Java 8 et versions ultérieures, et est activement utilisée dans de grands projets, tels que Spring Framework (via Spring Cache).

Pourquoi en a-t-on besoin ?

La mise en cache permet de réduire le temps d'accès aux données, de diminuer la charge sur les bases de données ou les API externes, et d'améliorer la réactivité de l'application. Caffeine résout ces problèmes avec un surcoût minimal : il garantit des latences de l'ordre de la sous-microseconde pour la lecture et l'écriture, gère automatiquement la mémoire et permet de configurer le cache de manière flexible en fonction des besoins métier spécifiques. Sans lui, vous devriez implémenter un cache manuellement à l'aide de HashMap et de minuteries, ce qui est complexe et peu fiable.

Installation

Ajoutez la dépendance dans votre fichier pom.xml (Maven) :

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

Pour Gradle :

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

Fonctionnalités principales

  • Évacuation automatique : suppression des entrées selon la durée de vie (expireAfterWrite, expireAfterAccess) ou selon la taille (maximumSize, maximumWeight).
  • Chargement asynchrone : via AsyncCache ou les méthodes loadingCache avec prise en charge de CompletableFuture.
  • Statistiques : collecte de métriques (hit rate, miss rate, evictions) pour le monitoring.
  • Politiques de remplacement : par défaut, utilise Window TinyLFU (un algorithme adaptatif, proche de l'optimal).
  • Sécurité Null : gestion correcte des valeurs null.

Exemple de code 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();

// Écriture dans le cache cache.put("user:123", "Alice");

// Lecture avec chargement automatique String user = cache.get("user:456", key -> fetchFromDatabase(key)); System.out.println(user); // null ou résultat de fetch

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

private static String fetchFromDatabase(String key) { return "Bob"; // Simulation d'une requête à la base de données }}

Quand l'utiliser

Caffeine est idéal pour mettre en cache les résultats d'appels API, les données issues de bases de données, les calculs ou toute opération fréquente et coûteuse. Utilisez-le dans les applications web, les microservices, les processus ETL ou dans tout projet Java nécessitant un cache rapide et fiable. Évitez Caffeine si vous avez besoin d'une mise en cache distribuée (dans ce cas, tournez-vous vers Redis ou Hazelcast).

Recommendations