Expulsion de cache dans un démarrage printanier

Expulsion de cache lors du démarrage du printemps

1. Vue d'ensemble

Dans ce court didacticiel, nous allons apprendrehow we can perform cache eviction using Spring. Nous allons créer un petit exemple pour illustrer cela.

Avant de continuer, consultez notre article -Guide To Caching in Spring - pour vous familiariser avec le fonctionnement de la mise en cache Spring.

2. Comment expulser un cache?

Spring propose deux méthodes pour expulser un cache, soit en utilisant l'annotation@CacheEvict sur une méthode, soit en câblant automatiquement lesCacheManger et en les effaçant en appelant la méthodeclear().

Voici comment ces deux mécanismes d'éviction du cache peuvent être implémentés dans le code.

2.1. Utilisation de@CacheEvict

Créons une méthode vide avec l'annotation@CacheEvict et fournissons le nom du cache que nous voulons effacer en tant qu'argument de l'annotation (dans ce cas, nous voulons vider le cache avec le nom «first»):

@CacheEvict(value = "first", allEntries = true)
public void evictAllCacheValues() {}

Spring will intercept all the methods annotated with @CacheEvict and clear all the values based on the allEntries flag. Il est possible d’expulser des valeurs en fonction d’une clé particulière.

Pour cela, tout ce que nous avons à faire est de passer la clé de cache comme argument à l'annotation au lieu de l'indicateurallEntries:

@CacheEvict(value = "first", key = "#cacheKey")
public void evictSingleCacheValue(String cacheKey) {}

La valeur de l'attributkey étant dynamique, nous pouvons soit utiliser Spring Expression Language, soit un générateur de clé personnalisé en implémentantKeyGenerator pour sélectionner les arguments d'intérêt ou les propriétés imbriquées.

2.2. Utilisation deCacheManager

Ensuite, voyons comment nous pouvons expulser le cache à l'aide desCacheManager fournis par le module Spring Cache. Tout d'abord, nous devons câbler automatiquement le beanCacheManager implémenté.

Nous pouvons ensuite vider les caches en fonction de nos besoins:

@Autowired
CacheManager cacheManager;

public void evictSingleCacheValue(String cacheName, String cacheKey) {
    cacheManager.getCache(cacheName).evict(cacheKey);
}

public void evictAllCacheValues(String cacheName) {
    cacheManager.getCache(cacheName).clear();
}

Comme nous pouvons le voir dans le code,the clear() method will clear all the cache entries and the evict() method will clear values based on a key.

3. Comment expulser tous les caches?

Spring ne fournit pas de fonctionnalité prête à l'emploi pour effacer tous les caches. Mais nous pouvons y parvenir facilement en utilisant la méthodegetCacheNames() du gestionnaire de cache.

3.1. Expulsion à la demande

Voyons maintenant comment nous pouvons effacer tous les caches à la demande. Pour créer un point de déclenchement, nous devons d'abord exposer un point de terminaison:

@RestController
public class CachingController {

    @Autowired
    CachingService cachingService;

    @GetMapping("clearAllCaches")
    public void clearAllCaches() {
        cachingService.evictAllCaches();
    }
}

Dans lesCachingService, on peut alorsclear all the caches by iterating over the cache names obtained from the cache manager:

public void evictAllCaches() {
    cacheManager.getCacheNames().stream()
      .forEach(cacheName -> cacheManager.getCache(cacheName).clear());
}

3.2. Expulsion automatique

Dans certains cas d'utilisation, l'expulsion de cache doit être effectuée automatiquement à certains intervalles. Dans ce cas,we can make use of the Spring’s task scheduler:

@Scheduled(fixedRate = 6000)
public void evictAllcachesAtIntervals() {
    evictAllCaches();
}

4. Conclusion

Nous avons appris à expulser les caches de différentes manières. Une des choses à noter à propos de ces mécanismes est qu'il fonctionnera avec toutes les implémentations de cache telles que eh-cache, infini-span, apache-ignite, etc.

Comme toujours, tous les exemples mentionnés dans ce tutoriel peuvent être trouvésover on Github.