1. 개요

이 빠른 사용방법(예제)에서는 Spring을 사용하여 캐시 제거를 수행하는 방법을 배웁니다 . 이를 시연하기 위해 작은 예를 만들겠습니다.

진행하기 전에 Spring 캐싱 작동 방식에 대해 알아보려면 Guide To Caching in Spring 문서를 확인하세요 .

2. 캐시를 제거하는 방법은 무엇입니까?

Spring은 메소드에 @CacheEvict 어노테이션을 사용하거나 CacheManger를 자동 연결하고 clear() 메소드 를 호출하여 캐시를 지우는 두 가지 방법으로 캐시를 제거하는 두 가지 방법을 제공합니다 .

코드에서 이러한 두 가지 캐시 제거 메커니즘을 구현하는 방법은 다음과 같습니다.

2.1. @CacheEvict 사용

@CacheEvict 어노테이션이 있는 빈 메소드를 생성 하고 지우려는 캐시 이름을 어노테이션의 인수로 제공합시다. 이 경우 이름이 "first"인 캐시를 지우려고 합니다.

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

Spring은 @CacheEvict 어노테이션 이 달린 모든 메서드를 가로채고 allEntries 플래그를 기반으로 모든 값을 지웁니다 .

특정 키를 기반으로 값을 제거하는 것도 가능합니다. 이를 위해 allEntries 플래그 대신 캐시 키를 어노테이션에 대한 인수로 전달하기만 하면 됩니다 .

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

속성 의 값은 동적이므로 관심 있는 인수 또는 중첩 속성을 선택하기 위해 KeyGenerator를 구현하여 Spring Expression Language 또는 사용자 정의 키 생성기를 사용할 수 있습니다 .

2.2. 캐시매니저 사용

다음으로 Spring Cache 모듈에서 제공하는 CacheManager를 사용하여 캐시를 제거하는 방법을 살펴보겠습니다 . 먼저 구현된 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();
}

코드에서 볼 수 있듯이 clear () 메서드는 모든 캐시 항목을 지우고 evict() 메서드는 키를 기반으로 값을 지웁니다 .

3. 모든 캐시를 제거하는 방법은 무엇입니까?

Spring은 모든 캐시를 지우는 기본 기능을 제공하지 않지만 캐시 관리자의 getCacheNames() 메소드를 사용하여 이를 쉽게 달성할 수 있습니다.

3.1. 요청 시 퇴거

이제 필요에 따라 모든 캐시를 지우는 방법을 살펴보겠습니다. 트리거 포인트를 생성하려면 먼저 엔드포인트를 노출해야 합니다.

@RestController
public class CachingController {
	
    @Autowired
    CachingService cachingService;
	
    @GetMapping("clearAllCaches")
    public void clearAllCaches() {
        cachingService.evictAllCaches();
    }
}

CachingService 에서 캐시 관리자로부터 얻은 캐시 이름을 반복하여 모든 캐시를 지울 수 있습니다 .

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

3.2. 자동 퇴거

특정 간격으로 캐시 제거를 자동으로 수행해야 하는 특정 사용 사례가 있습니다. 이 경우 Spring의 작업 스케줄러를 사용할 수 있습니다 .

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

4. 결론

이 기사에서는 다양한 방법으로 캐시를 제거하는 방법을 배웠습니다. 이러한 메커니즘에 대해 주목할 가치가 있는 것 중 하나는 eh-cache, infini-span, apache-ignite 등과 같은 다양한 캐시 구현 모두에서 작동한다는 것입니다.

항상 그렇듯이 이 기사에서 언급된 모든 예제는 Github에서 찾을 수 있습니다 .

res – REST with Spring (eBook) (everywhere)