spring에서 간단하게 사용할 수 있는 Java기반 오픈 소스 캐시 라이브러리
spring 내부적으로 동작하여 캐싱 처리를 한다
따라서 redis같이 별도의 서버를 사용하여 생길 수 있는 네트워크 지연 혹은 단절 같은 이슈에서 자유롭고 서버 어플리케이션과 라이프 사이클을 같이 사용한다.
spring.cache.jcache.config=classpath:ehcache.xml
@EnableCaching 어노테이션을 스프링부트 어플리케이션 부분에 붙이지 않고 따로 설정파일 역할을 하는 클래스에 생성해서 사용하거나, XML 파일에 별도로 캐싱기능을 사용할 부분에 대해 CacheManager 빈을 만들어 좀 더 세부적으로 설정할 수 있다.
3-2. 메인 클래스에 @EnableCaching 어노테이션 사용
주의사항
public method 에만 사용가능
같은 객체 내의 method끼리 호출 시에는 @Cacheable이 설정되어있어도 캐싱되지 않는다.
@Slf4j
public class CacheEventLogger implements CacheEventListener<Object, Object> {
public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
log.info("cache event logger message. getKey: {} / getOldValue: {} / getNewValue:{}", cacheEvent.getKey(), cacheEvent.getOldValue(), cacheEvent.getNewValue());
}
}
캐싱 처리가 되면 해당 클래스 내부의 onEvent() 메서드가 호출되면서 로그가 찍힐 것이다.
참고
ehcache3 는 캐싱할 데이터를 외부 메모리(offheap 혹은 disk)에 저장하기 위해서는 저장할 데이터(객체 혹은 인스턴스)가 Serializable이 구현 되어 있어야 한다.
즉, 캐싱할 데이터는 Serializable을 상속받은 클래스여야 한다.
왜냐하면, ehcache가 JVM의 힙 메모리가 아닌 곳(offheap 혹은 disk)에 캐시를 저장하기 위해서는 JVM 메모리에 인스턴스화 되어있는 객체의 데이터를 외부에서 사용할 수 있게 하기 위해 Serialize(직렬화)가 필요하기 때문이다.
참고
- https://medium.com/finda-tech/spring-%EB%A1%9C%EC%BB%AC-%EC%BA%90%EC%8B%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-ehcache-4b5cba8697e0
-https://medium.com/finda-tech/spring-%EB%A1%9C%EC%BB%AC-%EC%BA%90%EC%8B%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-ehcache-4b5cba8697e0
-https://velog.io/@yyong3519/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Cache-%EC%82%AC%EC%9A%A9
-https://velog.io/@yyong3519/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Cache-%EC%82%AC%EC%9A%A9-2
-https://velog.io/@yyong3519/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Cache-3
-https://velog.io/@yyong3519/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-Cache-%EC%A0%81%EC%9A%A9