web/Spring

스프링 CacheManager Ehcache

반응형


스프링에는 데이터를 
캐시로 보관할 수 있는 캐시 기능을 제공한다. 그 중 대표적으로 사용되는 Ehcache(ehcache-spring-annotation)에 대해 알아보자.



이를 사용하는 가장 대표적인 이유는 다음과 같다.

1. 꾸준하게 동일한 데이터 
2. 조회하여 데이터를 가지고 오는데 비용이 많이 소모되는 경우




[설정방법]

pom.xml

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.4</version>
</dependency>
cs



applicationContext.xml 수정


<import resource="applicationContext-cache.xml" />



applicationContext-cache.xml 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
 
<ehcache:annotation-driven />
 
<ehcache:config cache-manager="cacheManager">
<ehcache:evict-expired-elements interval="300" />
</ehcache:config>
 
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="/WEB-INF/cache/ehcache.xml" />
</bean>
 
</beans>
cs




Ehcache 설정 파일 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
maxBytesLocalHeap="32M" maxBytesLocalOffHeap="128M"
maxBytesLocalDisk="0M" updateCheck="false">
 
<cache
name="WedulCache"
maxElementsInMemory="100"
eternal="false"
overflowToDisk="false"
timeToLiveSeconds="30" />
 
</ehcache>
cs




- maxElementsInMemory : 한번에 최대 몇개의 엘리먼트 보관 가능한지 여부
- overflowToDisk : 캐시를 디스크에 쓰기.


캐시가 필요한 부분에 캐시적용



1
2
3
4
5
6
7
8
9
@Cacheable(value="findMemberCache", key="#name")
public Student findByNameCache(String name) { 
  return new Student(201014448"cjung@gmail.com", name);
}
 
@CacheEvict(value = "findMemberCache", key="#name")
public void refresh(String name) { 
  logger.info(name + "의 Cache Clear!");
}
cs





value는 encache.xml에 정의한 캐시 이름이고 key는 해당 캐시의 고유 키이다.
위의 구조는 name별로 캐시가 쌓이는 구조이다.

@CacheEvict는 캐시를 초기화하는 것이다.

※ 비고
ehcache.xml 설정 값.
http://www.ehcache.org/ehcache.xml





반응형