Redis란?
Redis는 인메모리 기반의 Key-Value NoSQL 데이터베이스이다.
인메모리 데이터베이스는 데이터를 RAM에 저장하기 때문에 접근 속도가 빠르다. 하지만 프로세스가 종료될 시, 데이터가 휘발될 수 있다.
때문에, 휘발되더라도 큰 문제가 없는 캐시(Cache)나 실시간 데이터 처리 용도로 많이 사용된다.
Redis 특징
1. 영속성(Persistence)이라는 기능을 제공해 데이터가 휘발되는 것을 방지할 수 있다.
Redis는 기본적으로 데이터가 유실될 수 있다.
하지만 스냅샷(SnapShot·RDB)과 AOF를 통해 데이터 유실을 방지할 수 있다.
스냅샷(SnapShot·RDB)은 특정 시점마다 전체 데이터를 디스크에 저장한다.
하지만 이 방식도 데이터는 유실될 수 있다.(스냅샷 사이에 시스템 장애가 발생하면, 휘발될 수 있기 때문.)
AOF는 모든 명령어를 로그 파일에 순차적으로 저장하고, Redis를 재시작할 시 로그 파일을 실행해 데이터를 복구한다.
스냅샷보다 데이터 유실 위험은 적지만, 파일의 크기가 커질수록 복구 시간이 오래 걸린다.
2. Master-Slave 구조로 고가용성과 읽기 Scale-out을 보장한다.
Redis는 Master의 데이터를 여러 개의 Slave로 복제(Replication)하는 Master-Slave 구조이다.
Redis의 쓰기 작업은 Master에서, 읽기 작업은 Master와 Slave을 나누어서 수행한다.
따라서 읽기 성능에 대한 Scale-out(수평 확장)을 보장한다.
고가용성(High Availability)이란 지속적으로 작업을 이어갈 수 있는 성질을 의미한다.
따라서 Master가 장애 시, Slave를 Master로 승격시켜 서비스를 유지시킨다.

3. 클러스터(Cluster) 구조로 샤딩 기반 Scale-out을 지원한다.
Redis는 샤딩(대규모 데이터를 여러 서버에 나누어 저장하는 기술)을 기반으로 데이터를 분산 저장하는 클러스터 구조를 가진다.
따라서 전체 데이터 공간을 16,384개의 해시 슬롯으로 나누어 여러 Master 노드에 균등하게 분배한다.

※ 복제는 같은 데이터를 복제하는 것이고, 분산은 데이터를 쪼개서 저장하는 것이다.
Redis 데이터 구조
Redis는 key-value를 기반으로 하며, String / Hash / List / Set / Sorted Set 등 다양한 자료구조를 값으로 지원한다.
1. String
String 자료구조는 텍스트, 직렬화된 객체, 바이너리 배열의 단일 값을 저장한다.
키와 값 저장: set key value
키와 값 조회: get key
2. Hash
Hash 자료구조는 field(Hash 키, Redis 데이터 구조의 그 키 아님!!)-value들의 집합을 저장한다.
키와 key-value 쌍 저장: hset key field1 value1 field2 value2
키에서 field로 value 조회: hget key field1 → value1
키에서 field 삭제: hdel key field1
3. List
List 자료구조는 순서가 있는 값의 목록을 저장한다.
Linked List로 구현되기 때문에 삽입·삭제 성능은 O(1)로 빠르지만, 조회 성능은 O(N)으로 느리다.
키와 목록 head(인덱스 0)에 저장: lpush key value
키와 목록 tail(인덱스 N - 1)에 저장: rpush key value
List의 head 삭제: lpop key
List의 tail 삭제: rpop key
이외에도 LLEN, LMOVE, LRANGE, LTRIM 등이 있다.
4. Set
Set 자료구조는 순서가 없는 String 집합을 저장한다.
키에 새로운 값 추가: sadd key value
키에서 값 제거: srem key value
키에서의 값 목록 조회: smembers key
키에 값이 있는지 확인: sismember key
5. Sorted Set
Sorted Set 자료구조는 score로 정렬된 멤버들의 집합을 저장한다.
키에 멤버(score, value) 추가: zadd key score1 member1 score2 member2
키에서 주어진 범위의 오름차순으로 정렬된 멤버 목록 조회: zrange key start stop
키에서 주어진 범위의 내림차순으로 정렬된 멤버 목록 조회: zrevrange key start stop
키에서 오름차순으로 정렬된 멤버 목록에서 특정 멤버 순위 조회: zrank key member
키에서 내림차순으로 정렬된 멤버 목록에서 특정 멤버 순위 조회: zrevrank key member
키에 있는 멤버 개수 조회: zcard key
👏
참고
'Development > 개발 공부' 카테고리의 다른 글
| [Git] 깃 브랜치 전략(Git Flow, Github Flow)(+TBD) (0) | 2025.12.14 |
|---|---|
| AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) (0) | 2025.11.10 |
| [Test] Mock을 이용한 단위 테스트(with Mockito) (0) | 2025.10.01 |
| [Test] Stub을 이용한 단위 테스트(with JUnit) (0) | 2025.09.30 |
| [Test] 단위 테스트(Unit Test) (0) | 2025.09.27 |