본문 바로가기

Programming

캐싱을 한다면 고려할 점 (Spring, @Cachable, @CacheEvict)

 서버에서 어떤 요청에 대해서 캐싱을 하려면 고려해야 할 것들이..
1. 정상 반환에 대해서만 캐싱
2. 유효한 캐싱 시간을 설정하고 지나면 삭제 후 다시 로딩/계산 후 캐싱 (왜냐면 그 사이에 내용이 변화할 수 있으니까)

 

 스프링 프레임워크를 놓고 본다면...

 

@Cachable(value = "캐시이름", key = "#캐싱키이름(파라미터)", unless = "#result == null")
public Object methodForCache(Object 캐싱키이름(파라미터)) {
    무언가 작업을 하고;
    return 결과물;
}

 

 이 때, 스프링 캐시의 구현체로 설정하는 ehcache, redis 등의 cache manager 에서 ttl (time to live) 설정을 하는 것도 가능하겠지만..

 

수동으로 한다면?

@CacheEvict(cacheNames="캐시이름", allEntries=true)
@Scheduled(fixedRate=시간)
public void evictCache() { }

 

으로 시간을 설정해서 초기화 가능하다.

 

@EnableScheduled ? 였나 선언 안하면 스케줄 안먹는거 까먹지 말장

 

api 호출로 특정 이름과 키값의 캐싱을 삭제 할 수 있도록 백도어?를 만들어두기도 했던 것 같다.

 

캐싱은 강력하고 강력한 힘에는 책임이..?