Redis는 Remote 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 |