
Redis(Remote Dictionary Server)는 메모리 기반 데이터 저장소로 주로 캐시로 사용되거나 빠른 데이터 접근이 필요한 상황에서 활용된다. Redis는 NoSQL 데이터베이스의 일종으로 데이터를 키-값 구조로 저장하며 다양한 데이터 구조를 지원한다.
Redis의 주요 특징
메모리 기반
Redis는 데이터를 메모리에 저장하므로 디스크 I/O를 사용하는 데이터베이스보다 매우 빠르다.
이 특성 덕분에 높은 처리 속도가 요구되는 환경에서 많이 사용된다.
다양한 데이터 타입 지원
Redis는 단순한 문자열뿐만 아니라 여러 데이터 구조를 제공한다.
데이터 지속성
Redis는 메모리 기반이지만 데이터를 영구적으로 저장할 수 있는 옵션을 제공한다.
분산 처리
Redis는 클러스터링 기능을 지원하여 대규모 분산 환경에서 데이터 처리를 할 수 있다.
초고속 성능
Redis는 초당 수십만 건의 읽기/쓰기 작업을 처리할 수 있으며 지연 시간이 낮아 실시간 애플리케이션에 적합하다.
주요 활용 사례
캐싱
가장 일반적인 사용 사례로 Redis는 API 응답, DB 쿼리 결과 등을 캐싱하여 성능을 향상시킬 수 있다.
세션 관리
사용자 로그인 상태나 세션 데이터를 Redis에 저장하여, 빠른 액세스를 보장한다.
실시간 분석
Redis의 빠른 읽기/쓰기 성능 덕분에 실시간 데이터 처리 및 분석에 사용된다.
메시지 큐
Redis는 Pub/Sub 기능을 통해 메시지 큐로 사용할 수 있다. 또한, Stream을 사용해 더 복잡한 메시징 시스템을 구현할 수 있다.
랭킹 및 리더보드
Sorted Set을 사용해 점수 기반 랭킹 시스템을 구축할 수 있다.
Windows10에서 Redis 설치 및 설정 방법 알아보기
기본구문)
- 저장 : SET key value
- 조회 : GET key
- 제거 : DEL key
- 유효시간 설정(초) : SET key value EX seconds
예시)
- 저장 : set test 1234
- 조회 : get test
- 제거 : del test
- 유효시간 설정 : set testkey testvalue EX 60


기본구문)
- 저장 : HSET key field value
- 필드 조회 : HGET key field
- 전체조회 : HGETALL key
- 필드 제거 : HDEL key field
- 키 제거 : DEL key
예시)
- 저장 : HSET user:1 name "John" age "30"
- 필드 조회 : HGET user:1 name
- 전체 조회 : HGETALL user:1
- 필드 제거 : HDEL user:1 age
- 키 제거 : DEL user:1




기본 구문)
- 왼쪽에 추가(인덱스 첫번째) : LPUSH key value
- 오른쪽에 추가(인덱스 마지막) : RPUSH key value
- 전체 조회 : LRANGE key 0 -1
- 인덱스 조회 : LINDEX key index
- 인덱스 범위 조회 : LINDEX key start end
- 왼쪽에서 값 제거 : LPOP key
- 오른쪽에서 값 제거 : RPOP key
예시)
- 왼쪽에 추가(인덱스 첫번째) : LPUSH tasks "task1" "task2"
- 오른쪽에 추가(인덱스 마지막) : RPUSH tasks "task4"
- 전체 조회 : LRANGE tasks 0 -1
- 인덱스 조회 : LINDEX tasks 1
- 인덱스 범위 조회 : LINDEX tasks 0 1
- 왼쪽에서 값 제거 : LPOP tasks
- 오른쪽에서 값 제거 : RPOP tasks





기본 구문)
- 추가 : SADD key value
- 조회 : SMEMBERS key
- 값 존재 확인(1이면 존재, 0이면 존재하지 않음) : SISMEMBER key
- 값 제거 : SREM key
예시)
- 추가 : SADD myset value1
- 조회 : SMEMBERS myset
- 값 존재 확인 : SISMEMBER myset value1
- 값 제거 : SREM myset value1



기본 구문)
- 추가 : ZADD key field value
- 조회(전체 키) : ZRANGE key 0 -1 WITHSCORES
- 조회(키, 값 모두) : ZRANGE key start stop [WITHSCORES]
- 특정 범위 조회 : ZRANGEBYSCORE key start end
- 값 제거 : ZREM key field
예시)
- 추가 : ZADD scores 100 "player1"
- 조회(전체 키) : ZRANGE scores 0 -1 WITHSCORES
- 조회(키, 값 모두) : ZRANGE scores 0 -1 [WITHSCORES]
- 특정 범위 조회(100점 이상 200점 이하) : ZRANGEBYSCORE scores 100 200
- 값 제거 : ZREM scores "player1"



기본 구문)
type key
예시)
type test

Redis는 키별 유효 시간을 설정하여 자동으로 데이터를 삭제할 수 있다.
EXPIRE key seconds : 초 단위 TTL 설정PEXPIRE key milliseconds : 밀리초 단위 TTL 설정EXPIREAT key timestamp : 특정 시점에 만료 설정 (UNIX 타임스탬프 사용)TTL key : 남은 TTL 확인 (초 단위)PTTL key : 남은 TTL 확인 (밀리초 단위)기본 구문)
유효시간 설정 : SET key value EX seconds
유효시간 확인 : TTL key
예시)
유효시간 설정 : SET user:1 "active" EX 60
유효시간 확인 : TTL user:1

Redis는 메모리 기반이지만 데이터를 영구적으로 보존하기 위한 두 가지 주요 방법을 제공한다.
RDB (Redis Database Snapshot)
특정 시점에 메모리 데이터를 디스크로 스냅샷 저장한다.
CPU 사용량이 적고, 읽기 속도가 빠르다.
명령어: SAVE, BGSAVE
AOF (Append Only File)
모든 쓰기 작업을 로그 형태로 디스크에 저장한다.
데이터 복구가 더 정확하지만 디스크 I/O 비용이 증가한다.
명령어: BGREWRITEAOF
| 방법 | 특징 | 장점 | 단점 |
|---|---|---|---|
| RDB | 특정 시점에 데이터 스냅샷 저장 | CPU 사용량 적음, 빠른 읽기 | 복구 시 데이터 유실 가능 |
| AOF | 모든 쓰기 작업을 로그에 기록 | 데이터 복구 정확성 높음 | 디스크 I/O 비용 증가 |
hash(userId) % 3 == 0 → Node 1에 저장hash(userId) % 3 == 1 → Node 2에 저장hash(userId) % 3 == 2 → Node 3에 저장 
Redis Sentinel
고가용성을 위한 기능으로 마스터 장애 발생 시 자동으로 슬레이브를 마스터로 승격한다.
Redis Sentinel 기본 구조 및 동작 예시
구성요소
동작예시

Redis의 장단점
| 항목 | RDBMS | Redis |
|---|---|---|
| 기본 개념 | 관계형 데이터베이스로 데이터를 테이블 형식으로 관리한다. | 메모리 기반 NoSQL 데이터베이스로 데이터를 키-값 형태로 관리한다. |
| 데이터 저장 방식 | 디스크 기반 스토리지(파일 시스템, 트랜잭션 로그) | 메모리 기반 스토리지 (필요 시 디스크에 백업 가능) |
| 데이터 모델 | 관계형 모델 (테이블, 행, 열, 스키마) | 비관계형 모델 (Key-Value, Hash, List, Set 등 다양한 데이터 구조) |
| 쿼리 언어 | SQL (Structured Query Language) | 자체 명령어 기반 (SET, GET, ZADD 등) |
| 속도 | 디스크 기반 I/O로 인해 상대적으로 느림 (캐시를 사용하면 개선 가능) | 메모리 기반 처리로 매우 빠름 (읽기/쓰기 속도가 밀리초 단위로 처리됨) |
| 트랜잭션 지원 | ACID(원자성, 일관성, 고립성, 지속성) 완벽 지원 | 원자적 연산 지원 (MULTI/EXEC로 트랜잭션 유사 기능 제공), 완전한 ACID는 아님 |
| 스키마 | 정해진 스키마 구조 필요 (스키마 변경 시 추가 작업 필요) | 스키마가 필요 없음 (유연한 데이터 구조 사용 가능) |
| 데이터 구조 | 테이블, 뷰, 인덱스 등으로 데이터 구성 | String, Hash, List, Set, Sorted Set, Stream 등 다양한 구조 사용 가능 |
| 확장성 | 수직 확장(서버 성능 강화)에 유리하지만, 수평 확장(노드 추가)은 복잡한 설정 필요 | 수평 확장에 용이 (클러스터링과 샤딩을 통해 쉽게 확장 가능) |
| 데이터 지속성 | 기본적으로 데이터를 디스크에 영구 저장 | 메모리 기반이지만 RDB, AOF 방식으로 디스크에 데이터 저장 가능 |
| 주요 용도 | 금융 시스템, ERP, CRM, 데이터 분석 등 구조화된 데이터 관리 | 캐싱, 세션 관리, 실시간 데이터 처리, 메시지 큐, 랭킹 시스템 등 빠른 데이터 접근이 필요한 환경 |
| 사용 사례 | 전통적인 트랜잭션 기반 시스템 (예: 은행, 전자상거래) | 실시간 성능이 중요한 시스템 (예: 소셜 미디어, 게임 리더보드, API 캐싱) |
| 보안 | 고급 보안 기능 내장 (사용자 관리, 권한 설정, 데이터 암호화) | 기본 보안 옵션은 단순 (requirepass 설정), 외부 접근 시 방화벽 및 TLS 설정 필요 |
| 운영 비용 | 디스크 및 CPU 비용, 복잡한 유지보수 | 메모리 의존도가 높아 대규모 데이터 저장 시 비용 증가 가능 |
| 복잡도 | 정교한 데이터 모델과 쿼리 작성 가능 (복잡한 연산 처리에 적합) | 단순한 데이터 모델로 고속 처리에 적합 (복잡한 연산은 애플리케이션 레벨에서 처리해야 함) |
참고 :
https://medium.com/@deepakchandh/different-types-of-redis-architecture-3181950b68b7
https://ankitsahay.medium.com/redis-multi-node-deployment-replication-vs-cluster-vs-sentinels-8099d15dcc09