본문 바로가기

Spring/Spring Boot(스프링 부트)

spring boot cache 넣기

728x90

Spring Boot에 Cache넣기

 

spring-boot-starter-cache만 import 하면 ConcurrentHashMap이 캐쉬 클래스가 된다.

이 클래스는 expire를 수동으로 해줘야 한다.

그래서 expire time을 줄 수 있는 caffein cache를 쓰는 것.

 

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine -->
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.6.2</version>
</dependency>

 

main(){

@SpringBootApplication
@EnableCaching
public class ChartDataServer extends SpringBootServletInitializer {}

 

CacheType.java

@Getter
public enum CacheType {
    ARTISTS("subsidy_info", 10, 100),
    ARTIST_INFO("subsidy_accepted", 10, 100);

    CacheType(String cacheName, int expiredAfterWrite, int maximumSize) {
        this.cacheName = cacheName;
        this.expiredAfterWrite = expiredAfterWrite;
        this.maximumSize = maximumSize;
    }

    private String cacheName;
    private int expiredAfterWrite;
    private int maximumSize;
}

 

CacheConfig.java

@Configuration
public class CacheConfig {
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        List<CaffeineCache> caches = Arrays.stream(CacheType.values())
                .map(cache -> new CaffeineCache(cache.getCacheName(), Caffeine.newBuilder().recordStats()
                                .expireAfterWrite(cache.getExpiredAfterWrite(), TimeUnit.SECONDS)
                                .maximumSize(cache.getMaximumSize())
                                .build()
                        )
                )
                .collect(Collectors.toList());
        cacheManager.setCaches(caches);
        return cacheManager;
    }
}

 

 

 

ChartDataService.java

@Cacheable(cacheNames = "history")
public String getHistory(String currencyPair, String timeUnit, long from, long to) {

해당 method에 @Cacheable추가

 

cache가 적용 되었는지 보기 위해 로그 설정하기

 

application.yml

logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type.descriptor.sql.BasicBinder: DEBUG

 

 

 

참고

Spring boot 에 caffeine 캐시를 적용해보자 - 어떻게하면 일을 안 할까? (yevgnenll.me)

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.