캐시
- 캐시란 자주 사용하는 데이터를 미리 보관해둔 임시 장소를 의미
- 캐시는 비교적 저장 공간이 적고 전체적인 비용이 비쌈(hdd, db에 비해)
- 대신 빠른 IO를 통해 성능적 이점을 가져올 수 있음
- 일반적으로 아래와 같은 특징들을 가지고 있는 데이터에 대해 캐시를 사용하면 좋음
- 도중에 변경될 일이 없는 데이터베이스 조회 값(ex. Id)
- 자주 호출되는 데이터
스프링 부트에서의 캐시
- 스프링 부트에서 사용할 수 있는 캐시는 대부분 JSR-107을 따름
- JSR이란?
- java Specification Requests의 줄임말로, 자바 플랫폼에 대한 규격을 제안하거나 기술한것을 의미
- 그 중 JSR-107은 JCache(Java Temporary Caching API)에 관한 내용
- JSR-107을 따르는 캐시를 사용하면 어떤 구현체 캐시를 사용하는지에 관계없이 추상화를 지원
로컬 캐시와 글로벌 캐시
- 로컬캐시
- 로컬(해당 서버)에서만 사용하는 캐시
- 외부 서버와 트랜잭션 비용이 들지 않기 때문에 속도가 빠름
- 로컬에서만 사용하기 때문에 분산 서버의 구조에서 캐시를 공유하기 어려움
- 글로벌 캐시
- 여러 서버에서 접근할 수 있는 캐시 서버를 구축하여 이용하는 방식
- 네트워크를 통해 데이터를 가져오는 트랜잭션 비용이 있기 때문에 로컬 캐시에 비해 상대적으로 느림
- 별도의 서버로 운영되기 때문에 서버 간 데이터 공유에 용이함
Redis
- Remote Dictionary Server의 약자로 '키-밸류' 구조의 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 관리 시스템
- 레디스의 특징
- 메모리 기반 데이터 저장:
- 레디스는 모든 데이터를 메모리에 저장하므로 매우 빠른 읽기 및 쓰기 작업을 제공합니다.
- 영속성을 위해 디스크에 데이터를 저장할 수도 있지만, 기본적으로는 인메모리 데이터베이스로 사용됩니다.
- 다양한 데이터 구조:
- 레디스는 단순한 문자열부터 복잡한 데이터 구조까지 다양한 데이터 유형을 지원합니다.
- 문자열, 리스트, 해시, 세트, 정렬된 세트 등의 데이터 타입을 활용할 수 있습니다.
- 높은 성능:
- 메모리 기반의 구조와 단일 스레드로 실행되는 특성으로 인해 레디스는 높은 처리량과 낮은 지연 시간을 제공합니다.
- 비동기적인 특성으로 인해 레디스는 대용량 트랜잭션 및 동시 액세스에 강합니다.
- 오픈 소스 및 커뮤니티 지원:
- 레디스는 오픈 소스 프로젝트이며, 활발한 커뮤니티에 의해 지원되고 있습니다.
- 다양한 플랫폼과 언어에서 사용할 수 있는 클라이언트 라이브러리가 제공되어 개발자들이 쉽게 통합할 수 있습니다.
- 레플리케이션 및 고가용성:
- 레디스는 마스터-슬레이브 레플리케이션을 지원하여 데이터의 복제를 가능케 합니다.
- 고가용성을 위해 슬레이브 노드가 마스터 노드의 데이터를 복제하고 필요시에 마스터로 승격될 수 있습니다.
- 파이프라이닝(Pipelining):
- 레디스는 여러 개의 명령을 한 번에 보내고 결과를 일괄적으로 받을 수 있는 파이프라이닝을 지원합니다.
- 이를 통해 네트워크 오버헤드를 줄이고 효율적으로 작업을 수행할 수 있습니다.
- 트랜잭션 및 원자성:
- 레디스는 다수의 명령을 하나의 트랜잭션으로 묶어 처리할 수 있습니다.
- 원자성을 지원하며, 트랜잭션 중간에 오류가 발생하면 해당 트랜잭션은 롤백됩니다.
- Pub/Sub 메커니즘:
- 발행-구독(Pub/Sub) 메커니즘을 통해 메시지 브로커의 역할을 수행할 수 있습니다.
- 채널을 통해 메시지를 발행하고, 해당 채널에 구독한 클라이언트들이 메시지를 수신할 수 있습니다.
'redis' 카테고리의 다른 글
분산락을 적용해보자 (Redisson) (0) | 2024.02.11 |
---|---|
레디스의 자료구조 (0) | 2024.01.04 |
대기열을 이용한 선착순 쿠폰 발행 (0) | 2024.01.04 |