1. 개요

이 사용방법(예제)에서는 몇 가지 기본적인 실제 예제에 대해 캐싱을 수행합니다. 특히, 이 캐싱 메커니즘을 시간 제한적으로 구성하는 방법을 시연할 것입니다. 또한 캐시에 대한 TTL(Time-to-Live)과 같은 시간 제한을 참조합니다.

2. 스프링 캐싱을 위한 설정

이전에 Spring에서 @Cacheable 어노테이션을 사용하는 방법을 시연 했습니다. 한편, 캐싱의 실제 사용 사례는 호텔 예약 웹사이트의 메인 페이지가 자주 열리는 경우입니다. 이는 호텔 List을 제공하기 위한 REST 엔드포인트 가 자주 요청되어 데이터베이스를 자주 호출한다는 것을 의미합니다. 데이터베이스 호출은 메모리에서 직접 데이터를 제공하는 것에 비해 느립니다.

먼저 SpringCachingConfig 를 생성합니다 .

@Configuration
@EnableCaching
public class SpringCachingConfig {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("hotels");
    }
}

SpringCacheCustomizer 도 필요합니다 .

@Component
public class SpringCacheCustomizer implements CacheManagerCustomizer<ConcurrentMapCacheManager> {

    @Override
    public void customize(ConcurrentMapCacheManager cacheManager) {
        cacheManager.setCacheNames(asList("hotels"));
    }
}

3. @ 캐시 가능한 캐싱

설정 후 Spring 구성을 사용할 수 있습니다. 호텔 객체를 메모리 에 저장하여 REST 엔드포인트 응답 시간을 줄일 수 있습니다 . 아래 코드 조각에서와 같이 호텔 객체 List을 캐싱하기 위해 @Cacheable 어노테이션을 사용  합니다.

@Cacheable("hotels")
public List<Hotel> getAllHotels() {
    return hotelRepository.getAllHotels();
}

4. @Cacheable 에 대한 TLL 설정

그러나 캐시된 호텔 List은 업데이트, 삭제 또는 추가로 인해 시간이 지남에 따라 데이터베이스에서 변경될 수 있습니다. TTL(Time-to-Live Interval)을 설정하여 캐시를 새로 고치고자 합니다. 그 후에 기존 캐시 항목이 제거되고 위의 섹션 3에서 메서드를 처음 호출할 때 다시 채워집니다.

@CacheEvict 어노테이션 을 사용하여 이를 수행할 수 있습니다 . 예를 들어 아래 예에서는 caching.spring.hotelListTTL 변수를 통해 TTL을 설정합니다.

@CacheEvict(value = "hotels", allEntries = true)
@Scheduled(fixedRateString = "${caching.spring.hotelListTTL}")
public void emptyHotelsCache() {
    logger.info("emptying Hotels cache");
}

우리는 TTL이 12시간이 되기를 원합니다. 밀리초 단위의 값은 12 x 3600 x 1000 = 43200000으로 밝혀졌습니다. 이를 환경 속성에서 정의합니다. 또한 속성 기반 환경 구성을 사용하는 경우 캐시 TTL을 다음과 같이 설정할 수 있습니다.

caching.spring.hotelListTTL=43200000

또는 YAML 기반 디자인을 사용하는 경우 다음과 같이 설정할 수 있습니다.

caching:
  spring:
    hotelListTTL: 43200000

5. 결론

이 기사에서는 Spring 기반 캐싱을 위해 TTL 캐싱을 설정하는 방법을 살펴보았습니다. 언제나처럼 GitHub에서 전체 코드를 찾을 수 있습니다 .

Generic footer banner