레디스: Redis

레디스 4 - Redis 스냅샷, database 설정

https://youtu.be/T1Bd0pajhcg?si=nul6dl79xF7tr876

Redis는 인메모리(In-Memory) 데이터 저장소다. 빠르지만, 프로세스가 종료되면 메모리 데이터는 사라진다.

그래서 Redis는 데이터를 디스크에 남기기 위한 영속성(Persistence) 전략을 제공한다. 이번 글에서는 그중 가장 기본인 스냅샷(RDB) 방식과 Redis 내부의 Database 구조를 함께 정리한다.

레디스 4 : Redis 스냅샷, database 설정


Redis 스냅샷(RDB)이란?

스냅샷은 말 그대로 특정 시점의 Redis 메모리 상태를 디스크에 “사진 찍듯” 저장하는 방식이다.

  • Redis는 기본적으로 메모리에 데이터를 저장
  • 스냅샷은 현재 메모리 전체 상태를 하나의 파일로 저장
  • 장애 발생 시 → 마지막 스냅샷 시점으로 복구

즉,

Redis 스냅샷 = 시점 기반 백업 (Point-in-time Backup)


스냅샷의 특징 정리

  • 인메모리 데이터를 디스크에 저장
  • 주기 조건 충족 시 자동 실행
  • 백업 파일: dump.rdb
  • 복구 시: Redis 시작 시 자동 로드

Redis 스냅샷 설정

redis.conf 파일 접근

sudo vi /etc/redis/redis.conf

save 파라미터: 스냅샷 주기 설정

# save <seconds> <changes>
save 900 1
save 300 10
save 60 10000

의미를 풀어보면:

  • 900초(15분) 동안 1개 이상 키 변경 → 스냅샷
  • 300초(5분) 동안 10개 이상 키 변경 → 스냅샷
  • 60초(1분) 동안 10000개 이상 키 변경 → 스냅샷

👉 시간 + 변경량 AND 조건이 아니라 OR 조건 👉 조건 중 하나만 만족해도 스냅샷 수행


스냅샷 실패 시 쓰기 차단 여부

stop-writes-on-bgsave-error yes
  • 스냅샷 실패 시 Redis 쓰기 요청 차단
  • 데이터 정합성을 우선시하는 설정
  • 운영 환경에서는 yes 권장

스냅샷 압축 설정

rdbcompression yes
  • 스냅샷 파일을 압축해서 저장
  • 디스크 사용량 감소
  • CPU 사용량 약간 증가

스냅샷 체크섬 설정

rdbchecksum yes
  • RDB 파일 끝에 CRC64 체크섬 기록
  • 파일 손상 여부 검증 가능
  • 안정성 중시 환경에서 권장

스냅샷 파일명

dbfilename dump.rdb
  • Redis 기본 스냅샷 파일명
  • 보통 변경하지 않음

스냅샷 동기화 파일 제거 옵션

rdb-del-sync-files no
  • 디스크 동기화 관련 옵션
  • 일반적인 경우 기본값 유지

스냅샷 저장 경로

dir /var/lib/redis
  • RDB 파일이 실제로 저장되는 위치
  • 디스크 용량 모니터링 대상

Redis Database 구조

Redis는 하나의 서버 안에 여러 개의 논리적 데이터베이스(Database)를 가질 수 있다.

개념적으로는 MySQL의 database와 비슷하다.


Database 특징

  • 하나의 Redis 서버에 여러 DB 존재
  • 각 DB는 완전히 분리된 Key 공간
  • 같은 key 이름을 여러 DB에 저장 가능
  • 기본값: 16개 Database
databases 16

각 Database는 0부터 시작하는 인덱스 번호를 가진다.


Database별 redis-cli 접속

기본 접속 (DB 0)

redis-cli

또는

redis-cli -n 0

특정 Database 접속

redis-cli -n 1
redis-cli -n 2
  • -n 옵션으로 DB 인덱스 지정
  • DB 간 데이터는 서로 완전히 독립

실무 관점에서의 Database 사용 기준

여기서 중요한 포인트가 하나 있다.

Redis Database 기능은 실무에서 거의 사용하지 않는다.

이유는 다음과 같다.

  • Database 단위 권한 제어 불가
  • 백업/복구 시 전체 서버 단위
  • 서비스 분리 기준으로 부적합
  • 키 네임스페이스(prefix) 방식이 더 명확

그래서 실무에서는 보통:

user:1
user:session:1
order:pending:123

처럼 key prefix로 논리적 분리를 한다.

Database는:

  • 학습용
  • 로컬 테스트
  • 간단한 실험 환경

정도로 이해하는 것이 정확하다.


정리

이 글의 핵심을 요약하면 다음과 같다.

  • Redis는 인메모리이므로 영속성 설정이 필수
  • RDB 스냅샷은 시점 기반 백업 방식
  • save 조건은 “시간 + 변경량” 기준
  • Database 기능은 존재하지만 실무 활용도는 낮음
  • 실무에서는 key 네이밍 전략이 더 중요


© 2020. All rights reserved.

SIKSIK