-
Notifications
You must be signed in to change notification settings - Fork 47
Ehcahce2 vs Ehcache3
JUNG YEON SU edited this page Oct 22, 2024
·
4 revisions
주로 로컬 캐시로 사용되는 java 오픈 소스 캐시 솔루션입니다.
-
로컬 캐시
- 애플리케이션이 실행되는 단일 서버 내에서 데이터를 메모리에 저장하여 빠르게 접근할 수 있도록 하는 캐시의 한 형태 입니다.
- 장점: 단일 서버 내에서 저장하므로 네트워크 통신을 거치지 않아 응답시간이 매우 짧다.
arcus-java-client
에서는 로컬 캐시를 지원하기 위해 ehcache를 사용하고 있습니다.
- Ehcache2와 Ehcache3의 가장 큰 차이점은 Jcache 표준 지원입니다.
-
Jcache(JSR-107)
- Jcache란 java 플랫폼에서 캐시에 대한 공식 표준 api
Ehcache가 Jcache의 표준을 지원함에 따라서 Jcache의 구현체로 ehcache를 사용할 수 있게 되었습니다.
이에 따라 Jcache 기반으로 인터페이스 및 구조가 바뀌었습니다.
-
구조 차이
기능 | Ehcache 2 | Ehcache3 |
---|---|---|
CacheManager | 단일 클래스로 전체 어플리케이션에서 단일 인스턴스만 존재하여 캐시 관리 | Jcache 표준의 인터페이스로 여러 인스턴스를 지원할 수 있도록 변경 |
Element/Entry | Element 캐시에 저장된 객체로 키-값, 메타데이터(만료시간등..) | Entry 캐시에 저장된 데이터로 키-값만 포함한다. |
- 인터페이스 차이
기능 | Ehcache2 | Ehcache3 | 설명 |
---|---|---|---|
copyOnRead / copyOnWrite | O | X | ehcache2 에서 동시성 문제를 해결하기 위해 있던 설정입니다. 읽기나 쓰기 작업을 할때에 복사본에다가 수행하여 동시성 문제를 해결하였습니다. ehcache3 에서 자료구조를 concurrentMap 을 사용하여 해결함으로서 사라졌습니다. |
memoryStoreEvictionPolicy(LRU) | O | X | LRU 정책은 ehcache3 의 디폴트 정책이 되었으며 변경은 할 수 없다. |
eternal | O | X | eternal 은 더 이상 지원하지 않습니다. |
diskExpiryThreadIntervalSeconds | O | X | 이는 일정시간 마다 디스크 안의 데이터의 만료를 체크하는 설정으로 ehcache3 에서는 disk 를 영구저장소 목적으로 활용하며 사라졌습니다. |
CacheLoader/Writer | X | O | 데이터를 요청하거나 로드 할때 외부 데이터 베이스에 저장 할 수 있습니다. |
- OffHeap 저장공간 지원
Ehcache의 데이터는 기본적으로 heap 메모리에 저장됩니다.
Ehcache3에서는 OffHeap이라는 Memory Heap 외부의 추가적인 유형의 메모리 저장소를 사용할 수 있습니다.
OffHeap 공간은 java의 GC가 적용되지 않는 공간이며 Byte 단위의 큰 캐시를 저장 할 수 있습니다.