ElastiCache는 인 메모리 캐시를 쉽게 배포/운영/조정할 수 있게 해주는 서비스.
캐싱의 장점을 가지고 있기 때문에 자주쓰는 데이터를 가져와서 애플리케이션 속도 개선, 지연시간 단축, 쿼리 호출 수를 줄이는 장점이 있다.
DB 서버에 대한 트래픽이 증가할 때에 대한 해결책으로 사용할 수 있다.
write보다는 read가 많으면서 느리고 비용이 많이 드는 데이터, 정적인 값이면서 자주 사용하는데이터, 기한이 경과된 데이터에서 고려하여 사용한다.

Memcached, Redis를 지원한다.
Memcached:
멀티스레딩, 유지 관리 용이, 간편한 수평 확장, 단일 AZ
Redis: 다양한 데이터 구조 지원, 지속성, 원자조작, 구독 메시지(Pub/Sub), 다중 AZ

특성 Memcached Redis
DB 부하를 줄이는 캐시 Y Y
고급 데이터 유형 N Y
데이터 세트 정렬/순위 지정 N Y
Pub/Sub 기능 N Y
다중 AZ로 자동 장애 조치 N Y
지속성 N Y

용어

노드 - 가장 작은 블록. 선택에 따라 memcached/Redis 인스턴스를 실행 클러스터 - 하나 이상의 노드로 구성된 논리적 그룹 엔드포인트 - 클러스터에 연결하는 고유한 주소 복제그룹 - Redis 클러스터의 모음 캐시 히트 - 캐시가 요청된 정보를 포함 캐시 미스 - 캐시가 요청된 정보를 포함하지 않음

캐싱 전략

레이지 로딩:
캐시 히트/미스에서 레이지 캐싱 전략을 구현한다.
필요할 때만 데이터를 캐시로 로드하는 전략으로 가장 많이 쓰이는 전략이다.

장점: 요청된 데이터만 캐싱 됨. 노드 장애가 치명적인 영향을 주지 않음. 단점: 캐시 미스 패널티가 있음. 애플리케이션이 오래된 데이터를 수신할 수 있음.

연속 쓰기:
데이터베이스가 작성될 때마다 캐시에 데이터를 추가하거나 데이터를 업데이트 한다.
일반적인 DB에서 write: read = 1: 9의 비율이기 때문에 효율이 떨어진다.

장점: 최신 데이터 단점: 쓰기 패널티, 데이터 누락(노드 장애 등으로 새로운 노드 생성시 DB 작성때까지 비어있음), 미사용 데이터, 잦은 캐시 변동.