Introduction à Guava CacheLoader

1. Introduction

Dans cet article, nous présenterons le Guava CacheLoader.

Avant de poursuivre la lecture, il est recommandé d'avoir une compréhension de base de la classe LoadingCache en premier. C'est parce que CacheLoader fonctionne spécifiquement avec lui.

Essentiellement, le CacheLoader est une fonction utilisée pour calculer une valeur dans le cas où elle ne serait pas trouvée dans un Guava LoadingCache.

2. Utilisation d'un CacheLoader avec un LoadingCache

Lorsqu'il y a un manque de cache avec un LoadingCache, ou que le cache doit être actualisé, le CacheLoader sera utilisé pour calculer les valeurs. Cela aide à encapsuler notre logique de mise en cache en un seul endroit, ce qui rend notre code plus cohérent.

2.1. Dépendance de Maven

Tout d'abord, ajoutons notre dépendance Maven:

 com.google.guava guava 29.0-jre 

Vous pouvez trouver la dernière version dans le référentiel Maven.

2.2. Calcul et mise en cache des valeurs

Voyons maintenant comment nous pouvons instancier un LoadingCache avec un CacheLoader :

LoadingCache loadingCache = CacheBuilder.newBuilder() .build(new CacheLoader() { @Override public String load(final String s) throws Exception { return slowMethod(s); } });

Essentiellement, le LoadingCache appellera notre CacheLoader en ligne chaque fois qu'il aura besoin de calculer une valeur qui n'a pas été mise en cache. Essayons de compter combien de fois notre slowMethod () est appelé lorsque nous récupérons quelque chose du cache plusieurs fois:

String value = loadingCache.get("key"); value = loadingCache.get("key"); assertThat(callCount).isEqualTo(1); assertThat(value).isEqualTo("expectedValue"); 

Comme nous pouvons le voir, il n'a été appelé qu'une seule fois. La première fois, la valeur n'a pas été mise en cache car elle n'avait pas encore été calculée. La deuxième fois, il a été mis en cache à partir de l'appel précédent, afin que nous puissions éviter la surcharge de l'appel de notre slowMethod () à nouveau.

2.3. Rafraîchir le cache

Un autre problème courant avec la mise en cache est l'actualisation du cache. Bien que l'aspect le plus difficile soit de savoir quand actualiser le cache, un autre est de savoir comment.

Résoudre le comment est simple lors de l'utilisation de CacheLoader. Le LoadingCache l' appellera simplement pour chaque valeur qui doit être actualisée. Essayons ceci avec un test:

String value = loadingCache.get("key"); loadingCache.refresh("key"); assertThat(callCount).isEqualTo(2); assertThat(value).isEqualTo("key");

Contrairement à nos appels ultérieurs à get (), refresh () forcera le CacheLoader à être appelé à nouveau, s'assurant que nos valeurs sont à jour.

3. Conclusion

Dans cet article, nous avons expliqué comment un LoadingCache est utilisé par un CacheLoader afin de calculer des valeurs sur les échecs de cache, ainsi que sur les actualisations du cache. Il vaut également la peine de consulter cet article plus détaillé sur la mise en cache de la goyave.

L'implémentation de ces exemples est disponible à l'adresse over sur GitHub. Il s'agit d'un projet Maven, il devrait donc être facile à exécuter tel quel.