다들 아시다시피 Redis는 휘발성인 메인 메모리를 주로 사용하는 NoSQL 인데요.
휘발성이다보니 리로드 되거나 다운되면 그 안에 있던 모든 데이터가 날라가는 특징을 갖고있습니다.
“저는 Redis에 중요한 사용자 관련 데이터를 저장할 것인데… RDB 처럼 관리하는 방법이 없을까요?“
있습니다!!
Redis는 중요한 데이터를 저장하고 관리하기 위해 Persistence 라는 것을 제공하고 있는데요.
오늘은 Redis Persistence를 공부하며 알게된 점과 느낀점을 여러분들께 공유하고자합니다^^
Redis는 기본적으로 인메모리 기반의 데이터 저장 기술을 갖고있는데, 사용자의 필요에 따라 디스크에 데이터를 저장할 수 있는 매커니즘을 제공하고있습니다.
Redis에서 디스크에 데이터를 저장하는 방식은 RDB(관계형 DB가 아님!!), AOF 이 두가지가 존재합니다.
Redis에서 제공하는 명령어 save라는 명령어를 이용해 일정 interval마다 지정한 갯수의 key를 저장하는 방식입니다.
save를 통해 데이터를 저장할 경우 dump.rdb 라는 데이터 셋 파일이 별도로 생성됩니다.
conf 파일에 다음과 같은 문구를 추가해줍니다.
save 60 1000 << 60 초마다 1000개의 key를 저장함
redis-cli에 bgrewriteaof 라는 명령어를 수행시 수행 시점으로 부터 입력, 수정, 삭제되는 데이터를 모두 저장합니다.
conf 파일에 다음과 같은 문구를 추가해줍니다.
appendonly yes
RDB의 장점 및 단점
AOF의 장점 및 단점
찾아본 결과... 실무에서는 보통 두가지 방식을 모두 혼용해서 사용한다고 하네요 ^^
Copy on Write(COW)에 대해 들어본적이 혹시 있으신가요?
COW에 대해 알고싶으시다면 여기를 참조해주세요!
Redis를 사용하다보면 다양한 상황 속에서 COW가 발생하는데요!
이를 대비해서 Redis를 사용할 때에는 충분한 메모리 공간을 확보해두고 사용해야한다고 합니다^^
아래의 케이스들이 대표적으로 COW가 발생하는 케이스입니다.