DB에서 조회하는 데 소요되는 리소스를 줄이고 이중화된 서버 간 분산 캐시된 내용을 공유 위해 EHCache를 사용했다.
관련 내용을 공부하고자 정리한다!
Ehcache
- EHCache는 Spring Cache의 대표격으로 오픈 소스 기반의 Local Cache이다.
- Java 제네릭을 활용하고 캐시 상호 작용을 단순화하는 개선 된 API
- javax.cache API (JSR-107)와의 완벽한 호환성 (스프링 캐싱 및 최대 절전 모드 통합)
- 오프 힙 전용 캐시를 포함한 오프 힙 스토리지 기능
- Disk, Memory 저장이 가능한 형태
MAVEN Dependency
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>
XML configuration
heap과 같은 환경 설정을 xml로 진행해도 되고 자바 코드로 진행해도된다
<config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">
<cache alias="foo">
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<resources>
<heap unit="entries">20</heap>
<offheap unit="MB">10</offheap>
</resources>
</cache>
<cache-template name="myDefaults">
<key-type>java.lang.Long</key-type>
<value-type>java.lang.String</value-type>
<heap unit="entries">200</heap>
</cache-template>
<cache alias="bar" uses-template="myDefaults">
<key-type>java.lang.Number</key-type>
</cache>
<cache alias="simpleCache" uses-template="myDefaults" />
</config>
EHCACHE XML 설정 시 속성 설명
name | 코드에서 사용할 캐시 name | 디폴트 |
maxEntriesLocalHeap | 메모리에 생성 될 최대 캐시 갯수 | 0 |
maxEntriesLocalDisk | 디스크에 생성 될 최대 캐시 갯수 | 0 |
eternal | 영속성 캐시 설정 (지워지는 캐시인지?) <br />external = "true"이면, timeToIdleSecond, timeToLiveSeconds 설정이 무시됨 | false |
timeToIdleSecond | 해당 초동안 캐시가 호출 되지 않으면 삭제 | 0 |
timeToLiveSeconds | 해당 초가 지나면 캐시가 삭제 | 0 |
overflowToDisk | 오버플로우 된 항목에 대해 disk에 저장할 지 여부 | false |
diskPersistent | 캐시를 disk에 저장하여, 서버 로드 시 캐시를 말아 둘지 설정 | false |
diskExpiryThreadIntervalSeconds | Disk Expiry 스레드의 작업 수행 간격 설정 | 0 |
memoryStoreEvictionPolicy | 캐시의 객체 수가 maxEntriesLocalHeap에 도달하면, 객체를 추가하고 제거하는 정책 설정 LRU : 가장 오랫동안 호출 되지 않은 캐시를 삭제 LFU : 호출 빈도가 가장 적은 캐시를 삭제 FIFO : First In First Out, 캐시가 생성된 순서대로 가장 오래된 캐시를 삭제 |
LRU |
pubic class CacheConfiguration {
private UserManagedCache<String, String> customCache;
public void initialize() {
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.withCache("preConfigured",CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class
,String.class
,ResourcePoolsBuilder.heap(100))
.build())
.build(true);
}
}
Cache<Long, String> preConfigured = cacheManager.getCache("preConfigured", Long.class, String.class);
// 캐시 생성
Cache<Long, String> myCache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.heap(100)).build());
// 캐시 입력
myCache.put(1L, "da one!");
// 캐시 조회
String value = myCache.get(1L);
// 캐시 사용 종료
cacheManager.close();
Reference
https://www.ehcache.org/documentation/3.8/getting-started.html
https://jaehun2841.github.io/2018/11/07/2018-10-03-spring-ehcache/#spring-cache-annotation
https://jojoldu.tistory.com/57
'Dev > Spring' 카테고리의 다른 글
[Spring] @Valid, @Validated 활용 (0) | 2020.07.15 |
---|---|
[Spring] Annotation 간략 정리 (0) | 2019.12.11 |
Spring3.0 - Spring WEB MVC (0) | 2019.04.19 |
Spring3.0 - MVC web & MyBatis (0) | 2019.04.18 |
Spring3.0 - MVC web & JDBC 게시판만들기 (0) | 2019.04.18 |