Basic
Redis(Remote Dictionary Server)는 ‘Key-Value’ 기반의 In-Memory 데이터 저장소로, 디스크 기반 데이터베이스보다 빠른 읽기/쓰기 속도를 제공하는 것이 가장 큰 특징이다.
Redis의 주요 특징
Section titled “Redis의 주요 특징”In-Memory DB
Section titled “In-Memory DB”Redis는 모든 데이터를 메모리에 저장하고 처리하여 낮은 지연 시간(Latency)과 높은 처리량(Throughput)을 달성한다.
- 단점
- 메모리는 휘발성이므로, 서버 장애나 전원 공급 중단 시 데이터가 유실될 위험이 존재
- 물리적 메모리 크기에 따라 저장할 수 있는 데이터의 총량의 제한
- 영속성(Persistence) 보완: 데이터 유실 위험을 보완하기 위해 디스크에 데이터를 저장하는 영속성 기능 제공
- RDB(Redis Database): 특정 시점의 데이터 전체를 디스크에 스냅샷 형태로 저장하는 방식
- AOF(Append Only File): 모든 쓰기/수정 명령을 로그 파일에 순차적으로 기록하는 방식
다양한 데이터 구조 지원
Section titled “다양한 데이터 구조 지원”애플리케이션 개발에 유용한 여러 자료구조를 지원하여 복잡한 요구사항을 쉽게 해결하도록 돕는다.
- String: 가장 일반적인 데이터 형태로, 문자열, 숫자, 바이너리 데이터를 저장
- List: Array와 유사한 자료구조로, 데이터의 순서가 보장되며 중복을 허용
- Set: 순서가 없고, 데이터의 중복을 허용하지 않는 집합
- Sorted Set: Set에 점수(score)를 더하여, 점수를 기준으로 정렬된 상태를 유지하는 집합
- Hash: 하나의 키 아래에 여러 필드(field)와 값(value) 쌍을 저장하는 구조
싱글 스레드 아키텍처
Section titled “싱글 스레드 아키텍처”Redis의 핵심적인 특징으로, 클라이언트의 명령(Command)을 처리하는 부분은 단일 스레드로 동작한다.
- 장점
- 단일 스레드로 동작하여 데이터에 대한 원자적(Atomic) 연산 보장
- 스레드 간 경쟁(Race Condition)이 발생하지 않아 복잡한 동기화 메커니즘이 필요 없음
- 단점
- 하나의 명령만 처리할 수 있어, 처리 시간이 긴 명령(예:
KEYS,FLUSHALL)이 실행되면 다른 모든 요청의 처리가 지연
- 하나의 명령만 처리할 수 있어, 처리 시간이 긴 명령(예:
Redis 6.0부터는 네트워크 I/O 처리에 멀티 스레드를 도입하여, 다중 클라이언트의 요청/응답 처리 효율을 높였다.(실제 데이터 접근/연산은 싱글 스레드로 동작)
고가용성 & 확장성
Section titled “고가용성 & 확장성”데이터 복제, Sentinel, Cluster 기능을 통해 서비스 안정성과 데이터 처리 용량 확장을 지원한다.
- Replication(복제): Master 노드의 데이터를 여러 Slave 노드에 실시간으로 복제하는 기능
- Sentinel(센티널): Master-Slave 구조의 고가용성을 자동으로 관리하는 시스템
- Cluster(클러스터): 데이터를 여러 노드에 자동으로 분산 저장(Sharding)하여 하나의 거대한 데이터베이스처럼 사용하는 기능
Redis 활용
Section titled “Redis 활용”| 활용 분야 | 설명 | 예시 |
|---|---|---|
| 캐싱 (Caching) | 자주 조회되지만 변경은 적은 데이터를 메모리에 저장하여 DB 부하를 줄이고 응답 속도를 향상시킴 | 로그인 세션, 상품 목록 |
| 세션 관리 (Session Management) | 분산 서버 간 세션 정보를 중앙에서 관리하여 일관성을 유지함 | 여러 서버 간 세션 공유 |
| 메시지 큐 (Message Queue) | List 구조의 LPUSH, RPOP 명령으로 간단한 메시지 큐를 구현하여 비동기 작업 처리에 활용 | 실시간 알림, 채팅 애플리케이션 |
| 분산 락 (Distributed Lock) | SETNX 명령을 활용해 여러 서버 환경에서 공유 자원에 대한 동시 접근을 제어 | 자원 동시 수정 방지 |