Bibliothèque / SDK
ben-manes/caffeine avatar
ben-manes/caffeine

caffeine : analyse pratique de ben-manes/caffeine

Une bibliothèque de mise en cache hautes performances pour Java. Cache Caffeine fournit un cache en mémoire utilisant une API inspirée de Google Guava.

17 866 étoiles1 714 forksJavaApache-2.0
GitHub

En bref

De quoi s’agit-il ?
A high performance caching library for Java. Cache Caffeine provides an in-memory cache using a Google Guava inspired API. Périmètre, usage documenté et points à vérifier.
À qui s’adresse-t-il ?
caffeine convient aux équipes dont le besoin correspond au périmètre décrit dans le README. Avant de l'adopter, exécutez `Caffeine.newBuilder()` avec `maximumSize`, expiration et statistiques, observez la sortie et vérifiez les permissions, les erreurs et les ressources consommées.
Puis-je l’utiliser commercialement ?
Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement Java, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Un cache en mémoire avec une API inspirée de Guava

Caffeine est une bibliothèque de cache en mémoire pour Java. Le README la décrit comme une bibliothèque de cache haute performance, quasi optimale. L'API est inspirée du cache de Google Guava, en s'appuyant sur l'expérience des auteurs dans la conception du cache de Guava et de ConcurrentLinkedHashMap. L'exemple du README construit un LoadingCache avec Caffeine.newBuilder(), définit une taille maximale de 10 000 entrées, une expiration cinq minutes après l'écriture et un rafraîchissement après une minute, avec une fonction qui crée un graphe coûteux en cas d'absence dans le cache. L'exemple montre comment le modèle du builder combine les politiques et la fonction de chargement en une seule expression. Le README renvoie également à un guide de l'utilisateur et à la documentation API pour la dernière version.

Éviction, expiration et références

Caffeine offre une éviction basée sur la taille lorsque le maximum est dépassé, en utilisant la fréquence et la récence pour décider quoi évincer. L'expiration basée sur le temps est mesurée depuis le dernier accès ou la dernière écriture, et les entrées peuvent être rafraîchies de manière asynchrone lorsque la première demande obsolète arrive. Le README liste également des clés automatiquement enveloppées dans des références faibles et des valeurs enveloppées dans des références faibles ou douces. Ces politiques sont optionnelles et peuvent être combinées lors de la construction du cache. Le README décrit la politique d'éviction comme quasi optimale et renvoie à une page d'efficacité distincte pour plus de détails. Chaque fonctionnalité renvoie à une page wiki, ce qui suggère que la documentation couvre des détails d'utilisation au-delà du README lui-même.

Chargement, suppression et statistiques

La bibliothèque prend en charge le chargement automatique des entrées dans le cache, éventuellement de manière asynchrone. Elle peut envoyer des notifications lorsque des entrées sont évincées ou supprimées, propager les écritures vers une ressource externe et accumuler des statistiques d'accès au cache. Le README présente ces fonctionnalités comme optionnelles, pouvant être combinées de manière flexible lors de la construction d'un cache. Chaque fonctionnalité renvoie à une page wiki dédiée : population, écouteurs de suppression, calcul et statistiques. L'exemple et la liste des fonctionnalités du README indiquent tous deux que le builder configure ces comportements au moment de la construction ; aucune modification à l'exécution n'est décrite.

Extensions et intégrations communautaires

Le README liste trois extensions : le support JSR-107 JCache, des adaptateurs Guava et un outil de simulation. Il nomme également des intégrations communautaires telles que Spring Cache, Play Framework, Micronaut, Quarkus, Apache Camel, Bootique et JHipster, ainsi que des wrappers linguistiques comme Scaffeine pour Scala et Aedile pour Kotlin. Une liste séparée couvre les projets d'infrastructure qui utilisent Caffeine, notamment Cassandra, Kafka, HBase, Apache Solr, Infinispan, Redisson et Neo4j. Le README présente ces intégrations comme fournies par la communauté, et non comme des modules officiellement supportés. Il ne décrit pas comment chaque projet utilise Caffeine, il les liste simplement comme des intégrations.

Articles de conception et recherche TinyLFU

Deux articles de HighScalability décrivent la conception de l'architecture de Caffeine, liés depuis le README sous les titres 'Design of a Modern Cache' parties un et deux, avec un jeu de diapositives associé. Le README renvoie également à trois articles de recherche sur la politique d'éviction TinyLFU, co-écrits par Ben Manes, qui évaluent la politique utilisée par Caffeine. Les articles sont publiés dans des conférences et revues ACM. Le README les présente comme une recherche évaluant la nouvelle politique d'éviction de Caffeine, mais il ne résume pas les conclusions des articles dans le README lui-même.

Téléchargement et versions Java requises

Le README indique de télécharger depuis Maven Central ou de déclarer une dépendance Gradle. L'exemple montre implementation("com.github.ben-manes.caffeine:caffeine:3.2.4") avec les modules optionnels guava et jcache dans la même version. Il précise d'utiliser 3.x pour Java 11 ou supérieur, sinon 2.x, et renvoie aux notes de version et au dépôt de snapshots Sonatype pour la version de développement. Le README ne donne pas d'exemple de coordonnées Maven ni d'instructions pour d'autres outils de build ; leur prise en charge n'est pas établie par la source et nécessiterait une vérification.

Apache License 2.0

Caffeine est distribué sous la licence Apache 2.0. La licence accorde une licence de droit d'auteur perpétuelle, mondiale, non exclusive, gratuite, sans redevance et irrévocable pour reproduire, préparer des œuvres dérivées, afficher et exécuter publiquement, sous-licencier et distribuer l'œuvre. Elle accorde également une licence de brevet similaire, qui peut prendre fin en cas de litige en matière de brevets. Le texte de la licence ne mentionne pas les garanties de sécurité, les engagements de support ou les conditions de garantie. Les utilisateurs peuvent librement utiliser et modifier la bibliothèque, mais la licence n'impose aucune obligation de support aux mainteneurs.

Vérifier caffeine sur son chemin réel

Pour qualifier ben-manes/caffeine, partez de `Caffeine.newBuilder()` avec `maximumSize`, expiration et statistiques et conservez la sortie complète. Comparez le résultat attendu par le README avec les journaux, les erreurs, les permissions requises et la consommation de ressources. Ce contrôle doit utiliser le scénario décrit par caffeine, car le dépôt ne permet pas d’inférer une compatibilité avec des environnements ou des versions qui ne sont pas nommés. Les points absents de la documentation restent à confirmer dans le code et dans la configuration du projet.

Conclusion éditoriale

caffeine convient aux équipes dont le besoin correspond au périmètre décrit dans le README. Avant de l'adopter, exécutez `Caffeine.newBuilder()` avec `maximumSize`, expiration et statistiques, observez la sortie et vérifiez les permissions, les erreurs et les ressources consommées. Les garanties non écrites dans le dépôt ne doivent pas être supposées.

Sources officielles

  1. Official README
  2. Project repository
  3. Release notes
Notes de la communauté

Notes de la communauté