Introduction à Guava CacheLoader

Introduction à Guava CacheLoader

1. introduction

Dans cet article, nous vous présenterons lesCacheLoader. Guava

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

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

2. Utilisation d'unCacheLoader avec unLoadingCache

Lorsqu'il y a un manque de cache avec unLoadingCache, ou que le cache doit être rafraîchi, lesCacheLoader seront utilisés pour le calcul des valeurs. Cela aide à encapsuler notre logique de mise en cache au même endroit, ce qui rend notre code plus cohérent.

2.1. Dépendance Maven

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


  com.google.guava
  guava
  21.0

Vous pouvez trouver la dernière version dans lesMaven repository.

2.2. Calcul et mise en cache des valeurs

Voyons maintenant comment nous pouvons instancier unLoadingCache avec unCacheLoader:

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

Essentiellement, lesLoadingCache appelleront nosCacheLoaderen ligne chaque fois qu'ils auront besoin de calculer une valeur qui n'a pas été mise en cache. Essayons de compter combien de fois notreslowMethod() 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 on peut le voir, il n’a été appelé qu’une 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 nosslowMethod() à nouveau.

2.3. Rafraîchir le cache

Un autre problème commun avec la mise en cache est l'actualisation du cache. Bien que l'aspect le plus difficile soit de connaîtrewhen pour actualiser le cache, un autre est de connaîtrehow.

La résolution deshow est simple lors de l'utilisation desCacheLoader. LesLoadingCache l'appelleront simplement pour chaque valeur à rafraîchir. 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 leCacheLoader à être appelé à nouveau, en s'assurant que nos valeurs sont à jour.

3. Conclusion

Dans cet article, nous avons expliqué comment unLoadingCache est utilisé par unCacheLoader 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é surGuava Caching.

L'implémentation de ces exemples peut être trouvéeover on GitHub. Ceci est un projet Maven, il devrait donc être facile à exécuter tel quel.