Кэширование выселения в Spring Boot

Выселение кэша в Spring Boot

1. обзор

В этом коротком руководстве мы собираемся изучитьhow we can perform cache eviction using Spring.. Мы создадим небольшой пример, чтобы продемонстрировать это.

Прежде чем продолжить, ознакомьтесь с нашей статьей -Guide To Caching in Spring - чтобы узнать, как работает кэширование Spring.

2. Как выселить кеш?

Spring предоставляет два способа удаления кеша: либо с помощью аннотации@CacheEvict к методу, либо путем автоматического подключенияCacheManger и его очистки путем вызова методаclear().

Вот как эти два механизма вытеснения кеша могут быть реализованы в коде.

2.1. Используя@CacheEvict

Давайте создадим пустой метод с аннотацией@CacheEvict и предоставим имя кеша, которое мы хотим очистить, в качестве аргумента аннотации (в данном случае мы хотим очистить кеш с именем 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. Можно удалить значения на основе определенного ключа.

Для этого все, что нам нужно сделать, это передать ключ кеша в качестве аргумента аннотации вместо флагаallEntries:

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

Поскольку значение атрибутаkey является динамическим, мы можем использовать Spring Expression Language или собственный генератор ключей, реализовавKeyGenerator для выбора интересующих аргументов или вложенных свойств.

2.2. ИспользуяCacheManager

Затем давайте посмотрим, как мы можем удалить кеш, используяCacheManager, предоставляемые модулем Spring Cache. Во-первых, мы должны автоматически подключить реализованный bean-компонентCacheManager.

И тогда мы можем очистить кеш с помощью наших потребностей:

@Autowired
CacheManager cacheManager;

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

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

Как мы видим в коде,the clear() method will clear all the cache entries and the evict() method will clear values based on a key.

3. Как удалить все кеши?

Spring не предоставляет готовых функций для очистки всех кешей. Но мы можем легко добиться этого, используя методgetCacheNames() диспетчера кеша.

3.1. Выселение по требованию

Давайте теперь посмотрим, как мы можем очистить все кеши по запросу. Чтобы создать триггерную точку, мы должны сначала предоставить конечную точку:

@RestController
public class CachingController {

    @Autowired
    CachingService cachingService;

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

Тогда вCachingService мы можемclear 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. Автоматическое выселение

Есть определенные случаи использования, когда удаление кэша должно выполняться автоматически через определенные промежутки времени. В этом случаеwe can make use of the Spring’s task scheduler:

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

4. Заключение

Мы узнали, как выселять кеши разными способами. Стоит отметить, что эти механизмы будут работать со всеми различными реализациями кеша, такими как eh-cache, infini-span, apache-ignite и т. Д.

Как всегда, все примеры, упомянутые в этом руководстве, можно найтиover on Github.

Related