Redis는 “Remote Dictionary Server”의 약자로,
데이터를 메모리(RAM)에 저장하는 초고속 Key-Value 데이터베이스입니다.
Redis의 특징
| 특징 | 설명 |
|---|---|
| In-memory 기반 | 모든 데이터를 메모리에 저장하므로 매우 빠른 응답 속도 제공 |
| Key-Value 구조 | Key 하나당 하나의 Value를 저장 (Value는 다양한 자료구조 가능) |
| 데이터 구조 다양성 | String, List, Set, Hash, Sorted Set, Stream 등 |
| TTL 지원 | 각 Key마다 만료시간(Time To Live) 설정 가능 |
Spring이 제공하는 Redis용 클라이언트
Java코드로 Redis 명령어를 대신 실행해주는 도구
흐름도
[ Java 코드 ]
│ "user:1=Ravi" 저장하고 싶어요
▼
[ RedisTemplate ]
│ SET user:1 "Ravi"
▼
[ Redis 서버 ]
│ 저장 완료!
▼
[ 결과 반환 ]
| 자료구조 | 특징 실제 | 활용 사례 |
|---|---|---|
| Strings | 가장 기본형 (Text, Integer 등) | 단순 캐싱, 세션 저장 |
| Lists | 데이터 삽입 순서대로 저장 | 최근 본 상품 목록, 메시지 큐 |
| Sets | 중복 허용 안 함, 집합 연산 가능 | 오늘 방문한 유저 수(Unique 방문자) |
| Sorted Sets | 가중치(Score)를 주어 정렬 유지 | 게임 랭킹 시스템, 실시간 급상승 검색어 |
| Hashes | 필드-값 쌍을 가진 객체 형태 | 유저 프로필 정보 (이름, 나이, 이메일) |
왜? : 문맥 교환(Context Switching) 오버헤드가 없고, 메모리 접근이 워낙 빨라서 스레드 하나로도 충분
주의점: 싱글 스레드이기 때문에 시간이 오래 걸리는 명령(예: KEYS *)을 날리면, 그 명령이 끝날 때까지 다른 모든 요청이 대기 하게 됨.
Redis는 메모리는 전원이 꺼지면 날아가는 것을 방지하기 위해 두 가지 백업 방식을 제공한다.
RDB (Snapshotting): 특정 시간마다 전체 데이터를 사진 찍듯 저장. (파일 사이즈 작음, 유실 위험 있음)
AOF (Append Only File): 모든 쓰기 명령을 일일이 로그로 기록. (파일 사이즈 큼, 복구 시 안정성 높음)