ehCache vs Redis vs Ignite을 알아보자!

1. main memory / cache란
❓ main memory
- RAM
- 컴퓨터의 CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리
- 접근속도가 빠름
❓ cache
- 레지스터 다음으로 빠른 메모리
- 자주 쓰일 것 같은 데이터를 메모리에서 캐시로 가져온다
- 캐시는 cpu와 ram 사이에 위치
💡 I/O 속도
2. ehCache 란?
✒️ 간단한 구조

❓
- spring에서 간단히 사용할 수 있는 Java 기반 오픈소스 캐시 라이브러리
key-Value
구조 데이터 관리 시스템
- local cahce
- 스프링 내부적으로 동작하여 캐싱처리 및 스프링 라이브사이클을 같이 함
- 속도가 빠르며 경량 cache
- 서버 간 분산 캐시를 지원 (서버가 2대 이상이라도 하나의 url만 호출, 동기, 비동기 복사, 피어 자동 발견)
- 영속성 기능을 제공하기 때문에 재 기동 시 데이터 모두 복구 가능
🥊 2.x VS 3.x
- 2.x
- heap memory를 사용 (GC에 의해 데이터 소멸)
- 3.x
- offheap 저장공간을 제공
- javax.cache API(JSR-107)와 호환성을 제공
- (객체 생성, 공유 액세스, 스풀링, 무효화 및 JVM 전반에 걸친 일관성을 포함하여 Java 객체의 메모리 캐싱에서 사용할 API 에 대한 기준)
3. Redis 란?
✒️ 간단한 구조

❓
- 인 메모리 플랫폼
- 비 관계형 데이터 베이스
key-Value
구조 데이터 관리 시스템
- global cahce
- 별도 저장소에 데이터를 보관
- local cache 보단 속도가 느리지만, 중복 데이터 및 데이터 일관성 문제가 없음
- Redis 프로세스가 다운되면 메모리 안에 저장된 데이터들은 모두 유실
- 영속성 기능을 제공하기 때문에 재 기동 시
aof
및 rdb(스냅샷)
을 이용하여 데이터 모두 복구 가능
- cluster(분산 저장) 및 master-slave 구조 지원
엔터프라이즈 버전
에서는 active-active 및 Partitioned 모드 및 Replicated 모드 선택 가능
3. Ignite 란?
✒️ 간단한 구조

❓
- 인 메모리 플랫폼
- 영속성 기능을 제공하기 때문에 재 기동 시 데이터 모두 복구 가능
- 수평적으로 제거 및 확장이 용이
key-Value
구조 및 RDB
구조로도 데이터를 저장
- RDB 지원으로 SQL
DDL,DML,DCL
을 완벽하게 지원
- global cahce
- 별도 저장소에 데이터를 보관
- local cache 보단 속도가 느리지만, 중복 데이터 및 데이터 일관성 문제가 없음
- local cache
- eh cache와 동일하게 내장 캐시로도 사용 가능
- Partitioned 모드 및 Replicated 모드 존재
- near caches 기능 제공
- client 힙 메모리에 가장 최근 또는 가장 자주 액세스한 데이터를 저장하는 더 작은 로컬 캐시
- continuous queries 기능 제공
- ignite 캐시에서 발생하는 데이터 수정 사항을 모니터링
- 모든 데이터 변경 사항에 대한 알림 가능
📌 여담
📚 참고