Jerry's Log

Redis - Overview

contents

1. Redis란 무엇인가?

Redis(REmote DIctionary Server)는 오픈 소스 인메모리(In-Memory) 데이터 구조 저장소입니다. 흔히 NoSQL 데이터베이스로 분류되지만, 기술적으로는 "데이터 구조 서버(Data Structure Server)"라고 부르는 것이 가장 정확합니다.


2. 왜 그렇게 빠른가?

Redis는 초당 수백만 건의 연산을 수행할 수 있습니다.

  1. RAM 접근: RAM은 하드디스크나 SSD보다 데이터 접근 속도가 훨씬 빠릅니다.
  2. 단일 스레드(Single-Threaded) 아키텍처: Redis는 명령 처리에 하나의 스레드만 사용합니다. 이는 멀티 스레드 시스템에서 발생하는 "컨텍스트 스위칭(Context Switching)" 비용과 데이터 경합(Race Condition) 문제를 제거합니다.
    • 참고: Redis 6.0부터는 네트워크 입출력(I/O) 처리에 멀티 스레딩을 지원하지만, 명령 실행 자체는 여전히 단일 스레드로 동작합니다.
  3. Non-blocking I/O: I/O 멀티플렉싱 기술(epoll/kqueue)을 사용하여 수천 개의 동시 연결을 효율적으로 처리합니다.

3. Redis 자료 구조 (핵심 비결)

Redis는 저장하는 데이터의 형태를 이해하고 조작할 수 있습니다.

자료형 설명 사용 사례
String (문자열) 기본 텍스트나 바이너리 데이터 (최대 512MB). HTML 캐싱, 사용자 세션, 카운터(INCR).
List (리스트) 문자열의 연결 리스트. 앞/뒤 삽입이 빠름. 메시지 큐, 최근 활동 피드 (트위터 타임라인 등).
Set (셋/집합) 순서가 없고 중복되지 않는 문자열 집합. 태그, 순 방문자, 친구 목록 (교집합/합집합 연산).
Sorted Set (ZSet) Set과 같지만, 각 멤버가 '점수(Score)'를 가짐. 실시간 리더보드(랭킹), 우선순위 큐.
Hash (해시) 필드와 값으로 구성된 맵 (미니 JSON 느낌). 사용자 프로필 저장 (user:100 -> 이름, 나이).
Bitmap (비트맵) 문자열을 비트 단위로 조작. 활성 사용자 추적(유저당 1비트), 기능 플래그.
HyperLogLog 적은 메모리로 고유한 개수를 추정하는 확률적 구조. 웹사이트 순 방문자 수 카운팅 (오차율 0.81%).
Geospatial 위도/경도 좌표 저장. "내 주변 5km 이내 식당 찾기".

4. 영속성 (Persistence: 데이터 저장)

Redis는 메모리에 있지만, 서버 재시작 시 데이터 유실을 막기 위해 디스크 저장 기능을 제공합니다.

A. RDB (Redis Database Backup)

B. AOF (Append Only File)

모범 사례: 실제 운영 환경에서는 둘 다 사용하는 것이 일반적입니다 (RDB는 백업용, AOF는 데이터 보존용).


5. 고가용성 및 확장 (High Availability & Scaling)

A. Replication (복제)

B. Redis Sentinel (센티넬)

C. Redis Cluster (클러스터 - 수평 확장)


6. 고급 기능


7. 주요 사용 사례

  1. 캐싱(Caching): 메인 데이터베이스(SQL)의 부하를 줄임.
  2. 세션 저장소(Session Store): 로그인 토큰 저장 (빠르고, TTL로 자동 만료됨).
  3. 실시간 분석: 클릭 수, 조회 수, 좋아요 수 즉시 집계.
  4. 리더보드: 게임 랭킹 구현 (Sorted Set 활용).
  5. 큐(Queue): 백그라운드 작업 처리를 위한 메시지 대기열 (List 활용).

8. Redis vs. Memcached

특징 Redis Memcached
자료형 풍부함 (List, Set, Hash 등) 단순 문자열만 지원
영속성 있음 (디스크 저장) 없음 (순수 메모리)
복제(Replication) 지원 미지원
복잡도 높음 매우 단순함
속도 매우 빠름 매우 빠름

references