Redis란?
Remote Dictionary Server의 약자로, 키-값 구조의 인메모리 데이터 저장소다. 데이터를 메모리에 저장하여 빠른 읽기/쓰기를 제공하며, 선택적으로 디스크에 영속화할 수 있다.
핵심 특징
- In-Memory 기반: 모든 데이터를 RAM에 저장하여 매우 빠른 응답 속도 (평균 1ms 이하)
- Single-Thread 모델: 하나의 요청을 처리하는 동안 다른 요청은 대기 (명령어의 원자성 보장)
- 다양한 자료구조 지원: String, List, Set, Sorted Set, Hash, Bitmap, HyperLogLog 등
- 영속성 옵션: RDB 스냅샷, AOF 로그를 통한 데이터 복구 가능
- Pub/Sub 기능: 메시지 브로커 역할 수행
Redis가 빠른 이유
1. 메모리 접근 속도
- RAM 접근 시간: 약 100ns
- SSD 접근 시간: 약 100μs (1,000배 느림)
- HDD 접근 시간: 약 10ms (100,000배 느림)
- 디스크 I/O, 파일 시스템 오버헤드가 완전히 제거됨
2. Single-Thread 아키텍처의 장점
- Lock 불필요: 동시성 제어를 위한 Lock/Unlock 오버헤드 없음
- Context Switching 제거: CPU 코어 간 스레드 전환 비용 없음
- 명령어 원자성 보장: 하나의 명령은 완전히 처리되거나 처리되지 않음
- 예측 가능한 성능: Multi-thread의 경쟁 상태나 데드락 걱정 없음
3. I/O Multiplexing
Single-Thread지만 여러 클라이언트 동시 처리 가능
- Linux의 epoll, BSD의 kqueue 같은 이벤트 기반 I/O 사용
- 수천 개의 연결을 하나의 스레드로 효율적으로 처리
- 네트워크 I/O는 비동기로 처리, 실제 데이터 처리만 순차적
4. 단순한 데이터 모델
- Key-Value 직접 접근으로 O(1) 시간 복잡도
- SQL 파싱, 쿼리 최적화, 트랜잭션 오버헤드 없음
- 관계형 DB의 JOIN, 인덱스 탐색 과정 불필요
5. 최적화된 자료구조
- C 언어로 구현된 고성능 자료구조
- Sorted Set: Skip List 사용으로 O(logN) 성능
- Hash: 충돌 최소화된 해시 테이블
- 메모리 단편화 최소화를 위한 jemalloc 사용
주요 활용 사례
1. 캐싱 (가장 일반적)
DB 조회 결과를 임시 저장하여 응답 속도 개선 및 DB 부하 감소

Spring Boot 예시:
@Cacheable(value = "users", key = "#id")
public User findById(Long id) {
return userRepository.findById(id);
}
2. 세션 저장소
분산 환경에서 사용자 세션을 공유
- WAS가 여러 대일 때 세션 일관성 유지
- Sticky Session 불필요
- Spring Session + Redis 조합으로 간단히 구현
3. 분산 락 (Distributed Lock)
여러 서버에서 동시에 접근하는 자원을 제어
RLock lock = redissonClient.getLock("order:lock:" + orderId);
if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
try {
} finally {
lock.unlock();
}
}
4. 실시간 랭킹/리더보드
Sorted Set을 이용한 점수 기반 순위 관리
5. Rate Limiting
API 요청 제한, IP별 접근 제어
데이터 영속성 전략

- RDB: 특정 시점의 스냅샷, 복구 속도 빠름, 일부 데이터 손실 가능
- AOF: 모든 쓰기 연산 로그, 데이터 손실 최소화, 파일 크기 큼
주의사항
1. 메모리 관리
- 메모리가 가득 차면
maxmemory-policy 정책에 따라 데이터 삭제
- 주요 정책:
allkeys-lru, volatile-lru, noeviction
- 적절한 TTL 설정 필수
2. Single-Thread 특성
- 오래 걸리는 명령어(KEYS, FLUSHALL) 사용 금지
- 대신 SCAN 명령어 사용
- 대량의 데이터는 Pipeline으로 처리
3. 캐시 전략
- Cache-Aside: 애플리케이션이 캐시 관리 (Spring 기본)
- Write-Through: 쓰기 시 캐시도 함께 업데이트
- Write-Behind: 비동기로 DB에 반영
4. 데이터 일관성
- Cache Stampede: 캐시 만료 시 동시 DB 접근 방지 (Lock 사용)
- 캐시 워밍: 서비스 시작 시 주요 데이터 미리 적재
핵심 요약
- Redis는 인메모리 기반으로 초고속 읽기/쓰기 제공
- Single-Thread + I/O Multiplexing으로 높은 동시성 처리
- 캐싱, 세션, 분산 락 등 다양한 용도로 활용
- Single-Thread 특성상 무거운 연산 금지
- 적절한 TTL과 메모리 관리 필수