본문 바로가기

Dev.World/개발상식&언어

#NoSQL에 대해 알아보자 1. Redis (/ Memcached)


Redis(REmote DIctionary Server)
Data Model = key - value Store
NoSQL의 일종으로
Memcahed와 비교되는 in memory 저장소 솔루션으로 분류되기도 한다.
다양한 데이터 구조체 지원한다.(일반적인 string 뿐만 아니라 set,list,hash같은 집합형 데이터 구조를 지원)
저장된 데이터에 대한 추가작업이 가능하다.(합집합, 교집합, Range Query)
데이터를 disk에 저장할 수 있다.

데이터 저장방식에는 두가지 방식이 있다.
1) snapshotting 방식
순간적으로 메모리에 있는 내용을 DISK 전체에 옮겨 담는 방식

2) AOF(Append On File)방식
redis의 모든 wirte/update 연산 자체 모두 log파일에 기록하는 형태

장점
1. 리스트, 배열 형식의 데이터 처리에 특화되어있다.
리스트 형 데이터의 입력과 삭제가 MySQL에 비하여 10배정도 빠르다.
2. 메모리를 활용하면서 영속적인 데이터 보존이 가능하다.
명시적으로 삭제하거나 만료일을 설정하지 않으면 데이터를 삭제하지 않는다.

단점
cache 및 redis session 등 새로운 관리포인트가 증가 할 수 있다.


Memcached(맴캐시드)
무료로 사용할 수 있는 오픈소스이며 분산 메모리 캐싱 시스템이다.
데이터베이스 부하를 줄여 동적 웹 애플리케이션의 속도개선을 위해 사용하기도 한다.
DB or API호출 or 페이지 렌더링 등으로부터 받아오는 결과 데이터를
작은 단위의 key-value 형태로 메모리에 저장하는 방식이다.
(NoSQL이 아님을 명심하자. 단지 Redis와의 비교를 위해 같이 포스팅한 것이다.)

필요량보다 많은 메모리를 가졌을 때, 시스템으로부터 메모리를 사용하고
필요로 하는 메모리가 부족한 경우에 이를 더 쉽게 가져다 사용할 수 있도록 만들어준다.
즉, 분산 메모리 캐시 형태를 도입하게 되므로
캐싱을 통해 DB나 API호출에 대한 횟수를 줄일 수 있고
이로 인해 응용프로그램 수요나 DB 데이터 접근에 대한 부하를 줄여
성능을 향상할 수 있다는 말이다.


Memcached 와 Redis의 비교
Memcached는 메모리에만 저장되므로 빠른 것인데
Redis는 메모리+disk에도 저장된다. 그러나 속도면에서 m과 큰 차이가 없다.
Memcached는 메모리에만 저장되므로 장비가 shutdown되면 데이터가 사라지지만
Redis는 disk에도 저장되기에 data복구가 가능하다
Memcached은 데이터가 만료되지 않았더라도 더이상 데이터를 넣을 메모리가 없으면
LPU 알고리즘에 의해 데이터가 사라지고 그 공간 저장소 메모리를 재사용하는 반면,
Redis는 명시적으로만 데이터를 제거할 수 있기 땜누에 저장소 메모리를 재사용하지 않는다.
Memcached는 문자열만 지원하지만
Redis는 문자열 외에도 다른 다양한 data type 을 지원한다.




-..-