반응형
Redis란?
Redis는 고성능의 온프 소스 인메모리 데이터 구조 저장소이다.
NoSQL의 한 종류로, 주로 키-값(key-value) 저장소로 사용되며 다양한 데이터 구조를 지원한다.
빠른 일기 및 쓰기 속도를 제공하여 캐싱, 세션 관리, 실시간 분석, 메시지 큐와 같은 다양한 용도로 활용된다.
Redis 특징
- 인메모리 저장소
모든 데이터를 메모리에 저장하여 매우 빠른 읽기 및 쓰기 성능을 제공.
고성능이 요구되는 애플리케이션에 적합한 특징. - 풍부한 데이터 구조
키-값 저장소뿐만 아니라 문자열, 해시, 리스트, 셋, 비트맴, 하이퍼로그로그, 스트림 등의 다양한 데이터 구조를 지원. - 지속성(영속성)
데이터는 메모리에 저장되지만, *RDB(Redis Database) 스냅샷과 *AOF(Append Only File) 로그방식을 통해 디스크에 지속적으로 저장할 수 있음. - 복제와 고가용성
마스터-슬레이브 복제를 통해 데이터 복제 가능.
*Sentinel을 사용하여 자동 페일오버와 고가용성을 구현할 수 있음. - 싱글 스레드 기반
Redis서버가 클라이언트 요청을 처리할 때, 하나의 스레드만을 사용하여 순차적으로 명령을 처리함.
설계가 간단하고, 컨텍스트 스위칭이 없어 빠른 응답을 제공하며 일관성을 보장함.
Redis 6.0부터는 멀티스레딩 I/O를 지원하기 시작. 코어 로직은 여전히 싱글스레드임. - 분산처리
Redis Cluster를 통해 데이터를 여러 노드에 분산하여 저장하고 높은 확장성을 제공.
서버 측 복제와 쓰기 성능 향상을 위해 클라이언트 측 *샤딩(Sharding)을 지원.
때문에, 싱글 스레드 기반임에도 높은 확장성과 성능을 제공.
* 용어 정리
RDB(Redis Database) 스냅샷 : 특정 시점의 메모리 내용을 디스크에 전체 저장하는 방식.
AOF(Append Only File) : 모든 쓰기/갱신 연산을 로그 파일에 기록하는 방식.
Sentinel : Redis의 고가용성을 보장하기 위한 도구로 Redis 서버를 모니터링하고 장애 발생 시 자동으로 장애 조치를 수행하며, 클라이언트에게 서버의 위치를 알려주는 역할을 한다.
샤딩(Sharding) : 데이터를 여러 서버나 노드에 분산하여 저장하는 기법.
데이터 구조
- String: 텍스트 또는 이진 데이터 (최대 512MB)
- Lists: 문자열의 순서가 유지되는 리스트
- Sets: 중복을 허용하지 않는 정렬되지 않은 문자열 집합
- Sorted Sets: 점수에 따라 정렬되는 집합
- Hashes: 필드와 값 목록을 저장하는 해시
- HyperLogLogs: 데이터 세트에서 고유한 항목을 세는 구조.
ㄴ 대규모 데이터 세트의 고유 요소 수를 추정하는데 사용.
주요 기능
- Lua 스크립팅
Redis 서버에서 직접 실행되는 Lua 스크립트를 지원하여 복잡한 연산을 원자적으로 수행 가능. - Pub/Sub 메시징
퍼블리시/구독(pub/sub) 메시징 패턴을 지원하여 실시간 메시징 시스템을 구현할 수 있음.
퍼블리셔는 특정 채널의 메세지를 발행하고, 구독자는 특정 채널을 구독하여 메세지를 실시간으로 수신. - TTL(Time To Live)
키에 유효기간을 설정하여 자동으로 삭제되게 하는 기능 - 원자성 카운터
경합 상태 없이 일관된 결과를 보장하는 카운터
Redis를 사용하는 상황
- 캐싱
- Redis는 읽기 속도가 매우 빠르다. 때문에 자주 참조되는 데이터를 캐싱하는 데 유리하다.
- 예를 들어, 데이터베이스 쿼리 결과, 웹 페이지, API 응답 등을 캐싱하여 성능을 크게 향상시킬 수 있다.
- 예시: 뉴스 사이트에서 가장 최근의 기사 목록을 Redis에 캐싱하여 빠르게 제공.
- 세션 저장소
- 사용자 세션 데이터를 Redis에 저장하여 빠르게 접근할 수 있다.
특히, 분산 웹 애플리케이션에서 세션 상태를 공유할 때 유용하다. - 예시: 전자 상거래 웹사이트에서 사용자 로그인 상태와 장바구니 내용을 Redis에 저장.
- 사용자 세션 데이터를 Redis에 저장하여 빠르게 접근할 수 있다.
- 실시간 분석
- Redis의 빠른 처리 속도와 다양한 데이터 구조를 활용하여 실시간 데이터를 효율적으로 관리할 수 있다.
때문에 실시간 로그 분석, 사용자 행동 추적, 실시간 통계 계산 등의 작업에 유리하다. - 예시: 소셜 미디어 플랫폼에서 실시간으로 좋아요, 댓글 수를 집계.
- Redis의 빠른 처리 속도와 다양한 데이터 구조를 활용하여 실시간 데이터를 효율적으로 관리할 수 있다.
- 메시지 큐
- Redis의 리스트와 Pub/Sub 기능을 이용하여 메시지 큐를 구현할 수 있다.
때문에 작업 대기열, 채팅 애플리케이션, 알림 시스템 등에 유용하다. - 예시: 백엔드 작업을 처리하기 위해 작업 대기열을 Redis로 구현.
- Redis의 리스트와 Pub/Sub 기능을 이용하여 메시지 큐를 구현할 수 있다.
- 비정형 데이터 처리:
- Redis의 데이터 구조를 이용하여 복잡한 비정형 데이터를 효율적으로 관리할 수 있다.
예를 들어, 그래프 데이터, 공간 데이터 등을 처리할 수 있습니다. - 예시: 위치 기반 서비스에서 사용자 위치 정보를 저장하고 조회.
- Redis의 데이터 구조를 이용하여 복잡한 비정형 데이터를 효율적으로 관리할 수 있다.
- 분산 잠금:
- 분산 환경에서의 잠금 메커니즘을 Redis로 구현하여, 동시에 여러 클라이언트가 동일한 리소스에 접근할 때 상호 배제(Mutual Exclusion)를 보장할 수 있다.
- 예시: 분산 애플리케이션에서 파일에 대한 동시 접근 제어.
728x90
반응형
'Computer Science > Database' 카테고리의 다른 글
저장 프로시저(Stored Procedure) - Oracle, MySQL 예시 (1) | 2024.11.30 |
---|---|
인덱스(Index) (1) | 2024.11.28 |
이상현상(Anomaly) (0) | 2024.11.26 |
정규화 (0) | 2024.11.25 |
SQL과 NoSQL (2) | 2024.11.24 |