Redis
Redis
- “REmote DIctionary System”의 약자로 메모리 기반의 Key/Value Store
1. Key/Value Store
-
Redis는 기본적으로 Key/Value Store
-
특정 키 값에 값을 저장하는 구조로 되어 있고 기본적인 PUT/GET Operation을 지원
-
이 모든 데이타는 메모리에 저장되고, 이로 인하여 매우 빠른 write/read 속도를 보장
-
데이타 억세스는 메모리에서 일어나지만 server restart 와 같이 서버가 내려갔다가 올라오는 상황에 데이타를 저장을 보장하기 위해서 Disk를 persistence store로 사용
2. 다양한 데이타 타입
- redis가 Key/Value Store이기는 하지만 저장되는 Value가 단순한 Object가 아니라 자료구조를 갖기 때문에 memcached 이랑 큰 차이
- String
일반적인 문자열로 최대 512mbyte 길이 까지 지원
- Set
set은 string의 집합,
여러개의 값을 하나의 Value 내에 넣을 수 있음
- Sorted Set
sorted set에서 데이타는 오름 차순으로 내부 정렬되며, 정렬이 되어 있는 만큼 score 값 범위에 따른 쿼리가능
- Hashes
value내에 field/string value 쌍으로 이루어진 테이블을 저장하는 데이타 구조체
- List
list는 string들의 집합으로 저장되는 데이타 형태는 set과 유사하지만, 일종의 양방향 Linked List라고 생각하면 됨.
List 앞과 뒤에서 PUSH/POP 연산을 이용해서 데이타를 넣거나 뺄 수 있고, 지정된 INDEX 값을 이용하여 지정된 위치에 데이타를 넣거나 뺄 수 있음
3. Persistence
redis는 데이타를 disk에 저장할 수 있음. memcached의 경우 메모리에만 데이타를 저장하기 때문에 서버가 shutdown 된후에 데이타가 유실 되지만,
redis는 서버가 shutdown된 후 restart되더라도, disk에 저장해놓은 데이타를 다시 읽어서 메모리에 Loading하기 때문에 데이타 유실되지 않음
저장 방식
snapshotting (RDB) 방식
-
순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식
-
SAVE와 BGSAVE 두가지 방식이있음
SAVE는 blocking 방식으로 순간적으로 redis의 모든 동작을 정지시키고, 그때의 snapshot을 disk에 저장
BGSAVE는 non-blocking 방식으로 별도의 process를 띄운후, 명령어 수행 당시의 메모리 snaopshot을 disk에 저장하며, 저장 순간에 redis는 동작을 멈추지 않고 정상적으로 동작
AOF 방식
- AOF(Append On File) 방식은 redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태
서버가 재 시작될때 기록된 write/update operation을 순차적으로 재 실행하여 데이타를 복구함
operation 이 발생할때 마다 매번 기록하기 때문에, RDB 방식과는 달리 특정 시점이 아니라 항상 현재 시점까지의 로그를 기록할 수 있으며, 기본적으로 non-blocking call
장점 : Log file에 대해서 append만 하기 때문에, log write 속도가 빠르며, 어느 시점에 server가 down되더라도 데이타 유실이 발생하지 않음
단점 : 모든 write/update operation에 대해서 log를 남기기 때문에 로그 데이타 양이 RDB 방식에 비해서 과대하게 크며, 복구시 저장된 write/update operation을 다시 replay 하기 때문에 restart속도가 느림
권장 사항
-
RDB와 AOF 방식의 장단점을 상쇠하기 위해서 두가지 방식을 혼용해서 사용하는 것이 바람직
-
주기적으로 snapshot으로 백업하고, 다음 snapshot까지의 저장을 AOF 방식으로 수행
-
서버가 restart될 때 백업된 snapshot을 reload하고, 소량의 AOF 로그만 replay하면 되기 때문에, restart 시간을 절약하고 데이타의 유실을 방지할 수 있음
출처 :https://bcho.tistory.com/654