1. 레디스는 인메모리 데이터 베이스
2. NoSQL의 일종. key-value스토어
3. java언어로 되어있다
4. 빠르다
5. 인메모리이기 때문에 데이터 유실이 발생할 수 있다 < 실험
6. 데이터를 넣은후 - 갑자기 어떤이유로 프로세스 종료 (kill -9해서 실험) . 다시 client로 접속해서 확인해보니 넣었던 데이터가 없어져 있다.
근데 이전에 넣었던 데이터는 유실되지 않고 있었다.
어떤경우에는 디스크에 저장하고 어떤경우에는 유실되는 건지? 그렇다면 이 유실을 방지하기 위한 레디스의 data persistence전략은 어떤것일지?
---
레디스 data persistence전략
1. RDB
1) 데이터 스냅샷을 일정 주기로 rdb에 저장한다.
2) 스냅샷을 찍어 저장할뿐이므로 과부하가 적다(성능 good)
3) 일정 주기적으로 저장되므로 데이터 유실이 있을 수 있다.
2. AOF
1) append only file
2) redis에서 실행한 커맨드를 전부 append only로 기록한다
3) 데이터 유실이 없다
4) 동기화 정책에 따라서 성능저하가 있을 수 있다 (매번 똑같은 커맨드 기록)
5) 유연성이 있다. 이를 테면 flushall를 하면 그 커맨드도 물론 기록되는데. 다시 데이터 찾아올때는 파일에서 해당 커맨드 삭제하고 찾아온다던지 .
3. 하이브리드
위 두 전략을 함께 가져간다.
---
1. 레디스 rdb data.dmp전략
- redis.conf에서 어디에 rdb덤프 파일 존재하는지 경로 확인
- save 30 1 => 1개 데이터 업데이트 시 30초간격으로 데이터 덤프스냅샷뜬다
- 해당 주기를 조절하여 얼만큼 주기로 스냅샷 찍을건지 결정할 수 있음
- 여기에 dump되어 데이터가 들어가면. 갑자기 레디스 죽더라도 다시 client로 들어가 확인해보았을때 데이터 유실없이 들어가 있는 것을 확인할 수 있음
레디스를 재시작할때 db파일에서 데이터를 읽어오는 것을 로그를 통해서 확인해볼 수 있다
2. --pipe메서드로 대량의 데이터를 한꺼번에 넣을 수 있다
- awk를 활용한다.
3. 레디스 한글 깨질경우
- 원래는 utf-8로 인코딩하지만 한글그대로의 데이터를 보고싶을때 : redis-cli --raw옵션사용한다.
4. 레디스 appendonlyfile전략
- 기본적으로 second단위로 저장. 그러므로 최대 유실가능한 데이터는 1세컨드 안에서 행해진 명령어의 데이터라고 할 수 있다
- dir 은 기본적으로 rdb와 같은위치
- appendonly를 yes로 수정한후 테스트 확인해볼수있다
- 이 aof파일의 명령어를 수정해서 원하는 데이터로만 원복이 가능하다
append only file로부터 데이터를 불러들여와 start하는 것을 확인할 수 있다.
댓글 없음:
댓글 쓰기