Undergoing

Spring Boot가 지원하는 cache 기법(공식 문서 기준) 본문

개발/Spring Boot

Spring Boot가 지원하는 cache 기법(공식 문서 기준)

Halkrine 2021. 6. 22. 16:55

- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.caching.provider

 

공식 문서 내용을 토대로 사이트 블로그 서핑하면서 정리된 정보들 요약

 

EhCache 2.X는 고려 안 함

 


1. Generic
- Generic caching is used if the context defines at least one org.springframework.cache.Cache bean. 
- A CacheManager wrapping all beans of that type is created.

2. JCache 
- JSR-107을 따르는 자바에서 제공하는 interface 
- EhCache 3, Hazelcast, Infinispan 등에 대해서도 종속성 관리를 제공함
* JSR-107 : JCACHE – Java Temporary Caching API
* Spring 4.1버전부터 JSR-107 annotations을 강력 지원

3. EhCache 2.x

3-1. Ehcache 3
- 로컬 캐시
- JCache
- key-value
- offheap이라는 저장 공간 제공
- 속도가 빠른 경량 Cache
- Disk, Memory에 저장이 가능
- 대규모 서비스에서 캐시 서버 여럿을 클러스터로 묶을 수 있는 기능 제공
- Java 메소드에 캐싱을 적용함으로써 캐시에 보관된 정보로 메소드의 실행 횟수를 줄일 수 있다.
- Spring 내부에서 동작. 데몬 미존재
- 서버 애플리케이션과 라이프사이클이 같음
- 노드 증가에 따라 네트워크 트래픽 증가(특히 동기 모드일 경우)
- 데이터 불일치 발생 가능성 존재

4. Hazelcast
- 메모리 캐시
- JCache
- key-value
- Java 중심
- Hybrid DB Model 지원
- 일정 thread 이상일 경우 속도는 redis보다 빠름(HazelCast 홈페이지 소개)
- 데이타 타입 : Distributed java.util.{Queue, Set, List, Map}
- Queue/Topic 개념 지원
- global lock 지원
- Eviction - LRU,LFU,TTL 지원
- Query는 지원하긴 하지만, 전체 노드에 분산 수행되기 때문에 효율적이지 않음
- Index 지원
- Trasaction 지원
- Executor 개념 지원 
- WAN Replication 지원

5. Infinispan
- JCache
- 분산 캐시
- 메모리 저장
- key-value
- multi thread 지원
- 독립 app
- 전체적으로 캐쉬의 개념이 강함
- K/V 형식으로 get/set 만 제공
- TTL 기능 있음.
- Local / Server 방식으로 클러스터 구성 가능함
- size(), values(), keySet(), entrSet()등 Full Scan 관련 API는 Concurrency 문제와, Performance 문제를 유발함
- JTA 기반 Tx 지원
- Index 개념 있음
- Query 기능
  . Search/Filtering 지원 - Hibernate Search framework과 Apache Lucene으로 구현됨 (Full Scan 이 아니라 Index와 Lucene을 사용)
  . Sorting 지원
  . Pagenation 지원
- Map & reduce 지원
- Eviction - LRU,TTL, Custom LRU 지원
- Executor 개념 지원

6. Couchbase
- JSON 기반, document store에 저장(memcached 호환 I/F가 존재하는 CouchDB 필요)
- key-value
- 과금버전 있음
- 물리적으로 떨어진 데이터 센터 간의 복제 가능(XDCR)
- Indexing , Grouping, Ordering, join 
- web으로 관리도구 제공
- 쉬운 장애 대응
- schemaless
- 메이저 라이브러리 제공 

7. Redis
- 분산 캐시
- 메모리 저장
- key-value
- 별도의 서버 존재
- single thread
- snapshot 존재
- secondary db model로 GDB 지원한다고 적혀 있음
- 다양한 데이터 구조를 지원하며 multilingual에서 유리함
- In-Memory Databases
- 기본적으로 single thread
- 데이터 손실 없이 클러스터링을 통해 수평 확장 가능
- redis 메모리가 날라가도 스냅샷을 제공하여 복구 가능
- 다양한 API 제공
- Eviction 정책을 6가지 제공
- 관리 데이터 복제 가능
- 관리의 까다로움

8. Caffeine
- 2020~
- 일종의 Guava cache 후속 버전
- maven에 repo 있음. spring-boot-stater-cache에 auto-configured 되어 있음
- time-based evication : 정해진 시간만큼 캐싱함
- 캐시 호출에 대해 statistic 둘 수 있음

9. memcached
- 분산 캐시
- 메모리 저장
- 2003년 개발됨
- 로컬 환경이지만 별도 구동
- HTML과 같이 상대적으로 작고 정적인 데이터를 캐싱할 때 좋음
- 메모리 관리가 redis만큼 정교하지는 않지만, 메타 데이터에 대한 메모리 리소스를 비교적 적게 소비하여 간단한 사용에 적합함
- multi thread
- 쉽게 확장할 수 있지만 해싱 사용 여부에 따라 캐시된 데이터의 일부 또는 전부를 잃음
- key name을 250bytes로 제한하고 일반 문자열로만 작동함

 

개인 블로그 출처 및 상세내용

http://blog.cmstown.com/2020/12/redis-vs-ehcache-vs-memcached/

https://javacan.tistory.com/entry/133

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hsm622&logNo=221652359513

https://blog.yevgnenll.me/posts/spring-boot-with-caffeine-cache

https://ojava.tistory.com/70