BACK-END/REDIS

[REDIS] REDIS RDB

2016.09.01 12:24


REDIS RDB



RDB는 특정 시점의 데이터를 바이너리 파일로 저장한다.

AOF 파일보다 사이즈가 작고, 따라서 로딩 속도가 AOF 보다 빠르다!

RDB파일의 내부 구조는 레디스 메모리(in-memory) 구조와 매우 비슷하다.

RDB 압축 파일을 만들지 위해서는 LZF압축을 사용할 수 있다.

LZF압축은 압축 시 아주 작은 메모리 요구사항을 가진 빠른 압축 알고리즘으로,

레디스와 효율적으로 동작한다.


이는 특정 시간, 즉 매 시간, 매 일, 매 주, 매 달 마다 RDB 파일을 저장할 수 있기 때문에,

RDB의 백업과 복구를 할 수 있다.


시점을 정하는 redis.conf의 파라미터는 SAVE이다.

SAVE 조건은 여러 개를 지정할 수 있고, 모두 or 조건이다.

즉 어느 것 하나라도 만족하면 저장한다.


redis.conf 파일의 초기값은 아래와 같이 되어있으며 뜻은 이렇다.

    • save 900 1            900초(15분) 동안 1번 이상 key변경이 발생하면 저장
    • save 300 10         300초(5분) 동안 10번이상 key변경이 발생하면 저장
    • save 60 10000     60초(1분) 동안 10000번이상 key 변경이 발생하면 저장.


RDB를 저장하지 않으려면 이 파일에서 SAVE를 모두 주석 처리 하면 된다.

RDB 파일 이름 지정은 redis.conf 에서 dbfilename dump.rdb이다.

명령으로 RDB파일을 생성할 수도 있다. BGSAVE 혹은 SAVE로 가능하다.

(+ dump.rdb 파일의 생성 경로는 redis.conf 파일의 dir 에서 설정 가능하다.!)




SAVE/BGSAVE


SAVE 커맨드는 RDB파일을 즉시 생성하지만, 스냅샷(snapshot) 과정에서 레디스 서버를 블락시키기 때문에 

조심히 써야한다.

대신 BGSAVE 커맨드(백그라운드 저장)을 사용할 수 있다.

BGSAVE 커맨드는 SAVE 커맨드의 기능과 동일하지만,

자식 프로세스로 실행하기 때문에 레디스를 블럭시키지 않는다.


백그라운드 저장 시 redis-server는 성능 저하를 피하기 위해 자식 프로세스(fork)를 생성한다.

그래서 redis-server 프로세스는 어떠한 디스크 I/O 작업을 수행하지 않는다.

redis-server가 쓰기를 받고 있다면, 자식 프로세스는 변경된 메모리 페이지를 복사한다.

복사된 메모리로 인해 총 사용 메모리가 증가될 수 있다.(copy-on-write)


 BGSAVE의 동작순서는 이렇다 


 

   자식 프로세스를 fork()함 -> 자식프로세스는 데이터를 새 RDB temp파일에 씀 ->쓰기가 끝나면 기존 파일을 지우고,  이름을 

   변경함  



 redis-cli 에서 BGSAVE 수행 시 나오는 메시지


   redis 127.0.0.1:6379 > BGSAVE

   Background saving started..

                                                                                                         

info persistence 로 볼 수 있는 정보 (redis3.x 이상 버전 부터 되는 것 같다! 나는 안나왕 밍무룩)


   redis 127.0.0.1:6379 > info persistence

    • rdb_bgsave_in_progress:1               현재 Rewrite가 진행중임을 나타냄  
    • rdb_last_save_time:1434352287    지난 번 RDB 파일 저장 시간  
    • rdb_last_bgsave_status:ok              지난 번 RDB 파일 저장 성공 여부  
    • rdb_last_bgsave_time_sec:7           지난 번 RDB 파일 저장에 걸린 시간  
    • rdb_current_bgsave_time_sec:4     현재 RDB 파일 저장 시작하고 현재까지 경과 시간




출처 : 

http://www.redisgate.com/redis/configuration/persistence.php#rdb_start

http://www.dbguide.net/db.db?cmd=view&boardUid=186829&boardConfigUid=9&categoryUid=1458&boardIdx=156&boardStep=1

http://knight76.tistory.com/entry/redis-RDB


'BACK-END > REDIS' 카테고리의 다른 글

[REDIS] REDIS RDB  (0) 2016.09.01

+ Recent posts

티스토리 툴바