CS

Redis 레디스

baek-dev 2025. 2. 1. 13:13

RedisRemote Dictionary Server의 약자로, 오픈 소스 기반의 인메모리 데이터베이스임. 데이터를 메모리에 저장하며, 빠른 속도를 제공하여 캐싱, 세션 관리, 실시간 분석 등에 많이 사용됨. 주로 NoSQL 데이터베이스로 분류되며, 키-값(key-value) 형태로 데이터를 관리함.

 

Redis의 주요 특징

1. 인메모리 데이터 저장

데이터를 메모리에 저장하므로 읽기/쓰기 속도가 매우 빠름.

필요 시 데이터를 디스크에 영구적으로 저장하거나 백업 가능.

 

2. 키-값 기반 데이터 모델

데이터를 “키”와 “값”의 쌍으로 저장.

값으로는 문자열(String), 리스트(List), 해시(Hash), 집합(Set), 정렬된 집합(Sorted Set) 등 다양한 데이터 구조를 지원.

 

3. 다양한 데이터 구조 지원

단순한 문자열뿐만 아니라 복잡한 데이터 구조를 다룰 수 있음.

예: 리스트로 큐(queue)를 구현하거나 정렬된 집합으로 순위 시스템 구현.

 

4. 초고속 성능

데이터를 메모리에 저장하므로 초당 수백만 개의 읽기/쓰기 작업 처리 가능.

트래픽이 많은 웹 애플리케이션에서 캐시로 자주 사용됨.

 

5. 서브(pub)/구독(sub) 기능

Publish/Subscribe 패턴을 지원하여 실시간 메시지 브로커 역할 수행 가능.

 

6. 분산 및 클러스터링

클러스터 모드를 통해 데이터를 여러 노드에 분산 저장 가능.

대규모 시스템에서도 확장성과 안정성을 보장.

 

7. 유지 가능성

데이터 스냅샷(snapshot)을 주기적으로 저장하거나, AOF(Append Only File) 방식으로 영구 저장 가능.


Redis의 주요 사용 사례

1. 캐싱

자주 사용되는 데이터를 Redis에 저장하여 데이터베이스나 서버의 부하를 줄이고 응답 속도를 높임.

예: 사용자 프로필, 검색 결과, 페이지 뷰 데이터.

 

2. 세션 관리

웹 애플리케이션에서 사용자 세션 데이터를 Redis에 저장하여 빠른 조회와 업데이트를 지원.

서버가 여러 대로 분산된 환경에서도 효율적인 세션 공유 가능.

 

3. 실시간 데이터 처리

실시간 순위표, 실시간 분석, 실시간 알림 등 빠른 데이터 처리가 필요한 시스템에서 사용.

 

4. 메시지 브로커

Pub/Sub 기능을 활용해 채팅 애플리케이션, 실시간 알림 시스템 등에서 메시지 브로커 역할 수행.

 

5. 큐(Queue) 시스템

Redis의 리스트(List) 데이터 구조를 활용하여 작업 대기열(queue)을 구현.

작업 처리 속도가 중요할 때 적합.

 

6. 카운터 및 분석

API 호출 수, 페이지 뷰 카운트, 실시간 통계 데이터를 효율적으로 처리.

 

7. 게임 리더보드

Sorted Set 구조를 활용하여 점수 기반 리더보드 생성.


Redis 데이터 타입

 

Redis는 다양한 데이터 구조를 지원하여 유연하게 활용 가능함.

 

데이터 타입설명예시

String 기본 데이터 타입으로, 문자열 데이터를 저장. "key": "value"
List 순서가 있는 값들의 리스트. ["value1", "value2"]
Set 중복을 허용하지 않는 값들의 집합. {"value1", "value2"}
Sorted Set 순서가 있는 값들의 집합(우선순위 기반). {("value1", 1), ("value2", 2)}
Hash 필드-값 쌍의 해시맵. {"field1": "value1", "field2": "value2"}
Stream 로그 데이터와 같은 시간 순서의 데이터를 저장. ["time1", "message1"]

Redis 명령어

 

Redis는 간단한 명령어를 사용하여 데이터를 저장, 조회, 삭제할 수 있음.

 

기본 명령어

1. 키-값 저장 및 조회

SET key value       # 데이터 저장
GET key             # 데이터 조회
DEL key             # 데이터 삭제

 

2. 리스트(List)

LPUSH key value     # 리스트 앞에 값 추가
RPUSH key value     # 리스트 뒤에 값 추가
LPOP key            # 리스트 앞의 값 제거 및 반환
RPOP key            # 리스트 뒤의 값 제거 및 반환

 

3. 해시(Hash)

HSET key field value # 해시 필드에 값 저장
HGET key field       # 해시 필드 값 조회
HGETALL key          # 모든 필드와 값 조회

 

4. 집합(Set)

SADD key value      # 집합에 값 추가
SMEMBERS key        # 집합의 모든 값 조회
SREM key value      # 집합에서 값 제거

 

5. 정렬된 집합(Sorted Set)

ZADD key score value  # 정렬된 집합에 값 추가
ZRANGE key 0 -1       # 정렬된 순서로 값 조회

 

6. TTL 및 만료

EXPIRE key seconds    # 키에 만료 시간 설정
TTL key               # 남은 시간 조회

Redis 설치 및 실행

 

1. 설치

Docker를 사용하는 경우:

docker run --name redis -p 6379:6379 -d redis

 

Ubuntu에 설치:

sudo apt update
sudo apt install redis-server

 

 

2. Redis CLI 실행

redis-cli

Redis 장점과 단점

 

장점

1. 초고속 성능: 메모리 기반으로 데이터를 처리하여 매우 빠름.

2. 다양한 데이터 구조 지원: 여러 가지 복잡한 문제를 해결할 수 있는 유연성 제공.

3. 간단한 사용: 명령어와 설정이 직관적이고 간단함.

4. 확장성: 클러스터링을 통해 확장 가능.

5. 실시간 처리: 실시간 애플리케이션에서 뛰어난 성능을 발휘.

 

단점

1. 메모리 의존성: 데이터가 메모리에 저장되므로 큰 데이터 세트를 저장하면 메모리가 부족할 수 있음.

2. 복잡한 클러스터링: 대규모 시스템에서 클러스터링 설정이 복잡할 수 있음.

3. 데이터 유실 가능성: 디스크에 지속적으로 데이터를 저장하지 않으면, 서버가 종료될 때 데이터가 손실될 수 있음.

 

Redis 요약

 

Redis는 빠르고 유연한 인메모리 데이터베이스로, 주로 캐싱, 세션 관리, 실시간 데이터 처리 등에 사용됨. 키-값 기반의 간단한 데이터 저장소에서 시작하여, 리스트, 집합, 정렬된 집합 등 다양한 데이터 구조를 지원하며, 고성능 애플리케이션을 구축하는 데 적합한 도구임. 빠른 응답 시간, 실시간 데이터 처리, 확장성 덕분에 대규모 웹 애플리케이션에서 널리 사용됨.

 

 

 

 

출처 : ChatGPT

'CS' 카테고리의 다른 글

JMeter 성능테스트  (1) 2025.02.04
DBMS, RDBMS, RDB  (3) 2025.02.03
화이트보드 설계  (1) 2025.01.30
CORS (Cross-Origin Resource Sharing)  (0) 2025.01.29
세션 쿠키 캐시 토큰 페킷  (0) 2025.01.27