[자바/스프링] Ehcache
Java
-
캐시 구성
<ehcache> <diskStore path="java.io.tmpdir" /> <!-- 기본 캐시 구성 --> <defaultCache maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <!-- 추가 캐시 구성 --> <cache name="캐시명" maxElementsInMemory="100" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="3600" overflowToDisk="true" /> </ehcache>
- maxElementsInMemory: 메모리 최대 보관 개수
- timeToLiveSeconds: 메모리 최대 보관 시간
- overflowToDisk: 메모리 최대 보관 설정 초과 시 엘리먼트를 디스크에 저장
-
캐시 구성 및 사용
CacheManager cacheManager = CacheManager.getInstance(); Ehcache ehcache = cacheManager.getEhcache("캐시명"); // 서비스에 ehcache 의존성 주입 MyService myService = new MyService(cache); ... cacheManager.shutdown();
CacheManager
: 클래스패스 루트에서ehcache.xml
파일을 찾아 캐시 구성 후 해당 캐시명에 대한 캐시 인스턴스 요청- 캐시 인스턴스를 서비스 인스턴스에 주입
-
서비스 메소드 내에서 키-값으로 캐싱
-
기본 사용
if (!cache.containsKey(key)) { cache.put(key, value); return null; } else { return cache.get(key); }
-
atomically하게 수행
cache.putIfAbsent(key, value)
-
Spring
- 수동 캐싱
-
CacheManager
구성, 캐시 서비스 생성 후ApplicationContext
객체로 로드@Configuration public class MyCachConfiguration { @Bean public CacheManager cacheManager() { return CacheManager.getInstance(); } @Bean public MyService myService() { Ehcache cache = cacheManager().getCache("캐시명"); // 생성자 주입 return new MyService(cache); } }
-
캐시 구성 로드 후 컨텍스트로부터 서비스를 가져와 사용
ApplicationContext context = new AnnotationConfigApplicationContext(MyCachConfiguration.class); MyService myService = context.getBean(MyService.class); // 서비스 사용 ... ((AbstractApplicationContext) context).close();
-
-
스프링으로 자동 구성
@Configuration public class MyCachConfiguration { @Bean public EhCacheManagerFactoryBean cacheManager() { EhCacheManagerFactoryBean factory = new EhCacheManagerFactoryBean(); factory.setConfigLocation(new ClassPathResource("ehcache.xml")); return factory; } @Bean public EhCacheFactoryBean myCache() { EhCacheFactoryBean factory = new EhCacheFactoryBean(); factory.setCacheManager(cacheManager().getObject()); factory.setCacheName("캐시명"); return factory; } @Bean public MyService myService() { // 생성자 주입 return new MyService(myCache().getObject()); } }
EhCacheManagerFactoryBean
으로 EhcacheCacheManager
구성- 리소스 로딩 메커니즘으로 Ehcache 구성 파일 로드 가능
- 기구성
CacheManager
을 쉽게 재사용할 수 있고 원하는 이름으로 등록 가능 - 이미 구성된 캐시가 있는지 찾아보고 없으면
ehcache.xml
파일의defaultCache
엘리먼트를 이용해 캐시를 새로 구성
EhCacheFactoryBean
으로 Cache 인스턴스를 가져옴
Comments