Caffeine pour Java : un cache en mémoire haute performance
Qu'est-ce que Caffeine et pourquoi l'utiliser ?
Caffeine est une bibliothèque de cache en mémoire haute performance écrite en Java. Créée par Ben Manes, elle est l'une des implémentations de cache les plus rapides pour la JVM. Caffeine est conçue pour répondre aux exigences modernes du multithreading et offre une API riche pour gérer le cycle de vie des objets dans le cache.
Pourquoi utiliser Caffeine ? Dans toute application manipulant des données, il arrive souvent que les mêmes données soient demandées à plusieurs reprises. Au lieu d'exécuter à chaque fois une opération coûteuse (requête en base de données, appel d'API externe, calculs complexes), vous pouvez stocker le résultat dans un cache. Caffeine le fait de manière extrêmement efficace grâce à l'algorithme W-TinyLFU (Window Tiny Least Frequently Used), qui assure une grande précision d'éviction des éléments avec un minimum de surcharge.
Cette bibliothèque est activement utilisée dans de grands projets comme Spring Framework (depuis la version 5.0), où elle constitue l'implémentation de cache par défaut. Caffeine prend en charge le chargement asynchrone, la mise à jour automatique des entrées, les statistiques et de nombreuses stratégies d'éviction (par temps, par taille, par références).
Installation
Caffeine est distribuée via Maven Central. Pour l'utiliser, ajoutez la dépendance dans votre fichier pom.xml (Maven) ou 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'
Pour obtenir la dernière version, consultez Maven Central.
Démarrage rapide
Un exemple minimal de création et d'utilisation d'un cache Caffeine :
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.util.concurrent.TimeUnit;
public class QuickStart {
public static void main(String[] args) {
// 1. Créer un cache avec une taille maximale de 100 éléments
// et une durée de vie de 10 minutes après le dernier accès
Cache<String, String> cache = Caffeine.newBuilder()
.maximumSize(100)
.expireAfterAccess(10, TimeUnit.MINUTES)
.build();
// 2. Ajouter une valeur
cache.put("key1", "Bonjour, Caffeine !");
// 3. Récupérer une valeur
String value = cache.getIfPresent("key1");
System.out.println(value); // Affiche : Bonjour, Caffeine !
// 4. Récupérer une valeur avec une fonction de chargement (si la clé n'existe pas)
String loadedValue = cache.get("key2", k -> "Chargé : " + k);
System.out.println(loadedValue); // Affiche : Chargé : key2
}
}
Méthodes et classes principales
Examinons les classes et méthodes clés de Caffeine. La classe principale pour la configuration est Caffeine, et pour travailler avec le cache, ce sont Cache, LoadingCache et AsyncCache.
1. Caffeine.newBuilder()
Signature : public static Caffeine<K, V> newBuilder()
Fonction : Crée un nouveau builder pour configurer le cache. Permet de définir tous les paramètres
Aussi dans la bibliothèque
Travailler avec CSV en C# (.NET) : bibliothèques et exemples de code
GraphQL en C++ : la bibliothèque cppgraphqlgen pour les API modernes
Client Redis pour Go (Golang) : go-redis et redigo — guide complet
Envoi de SMS en Go (Golang) : API de la bibliothèque golang-sms