Redis는 키를 통해 문자열, 해시, 집합, 정렬된 집합 등 여러 자료구조를 다루는 데이터 저장소다. 캐시뿐 아니라 카운터, 순위, 작업 전달 같은 기능에도 활용된다. 어떤 자료구조를 선택하는지에 따라 명령과 데이터 접근 방식이 달라진다.
값의 모양을 선택하기
문자열은 단일 값에, 해시는 필드와 값 묶음에, 집합은 중복 없는 원소에 사용할 수 있다. 점수가 있는 목록에는 정렬된 집합을 검토할 수 있으며 이벤트 기록에는 Redis Streams가 있다. 공식 자료구조 소개
위키 캐시의 예
위키의 인기 문서 목록을 계산한 뒤 Redis에 일정 시간 보관하는 구조를 생각할 수 있다. 이때 원본은 PostgreSQL에 두고 캐시가 없으면 다시 계산하는 책임을 정한다.
| 데이터 | 먼저 정할 질문 |
|---|---|
| 인기 문서 목록 | 언제 갱신하고 얼마나 오래 보관할까 |
| 조회 수 카운터 | 어느 시점에 원본에 반영할까 |
| 작업 전달 | 실패와 재처리를 어떻게 다룰까 |
캐시가 빠르다는 이유만으로 비공개 문서나 사용자별 응답을 공용 키에 섞어서는 안 된다. 키에 포함할 범위와 무효화 조건을 데이터의 공개 범위에 맞춰 설계해야 한다.
저장과 복구
Redis는 RDB 스냅샷과 AOF 기록 등 영속성 선택지를 제공한다. 영속성을 끄는 구성도 가능하므로, 서버가 재시작하면 어떤 데이터가 남는지 설정에 따라 확인해야 한다. 공식 영속성 설명
다시 만들 수 있는 캐시와 잃으면 안 되는 업무 데이터는 복구 목표가 다르다. 메모리 용량, 만료 정책, 장애 시 대체 경로를 함께 정하는 것이 중요하다. Redis를 추가했다는 사실만으로 서비스 전체의 일관성이나 가용성이 자동 완성되는 것은 아니다.