Redis(REmote DIctionary Server)

Yerin·2020년 7월 7일
0

Salvatore Sanfilippo라는 이탈리안 해커가 mysql로 어떤 어플 개발하다가 느려터졌다 생각하고 직접 빠른 서버를 만들어야겠다고 생각하여 개발하게 되었다는 레디스.....

  • Redis
    : 레디스는 고성능 key-value저장소로서 list, hash, set, 정렬된 셋 등 여러 형식의 자료구조를 지원하는 NoSQL이다. 메모리에 상주하면서 RDBMS의 캐시 솔루션으로 주로 사용된다.
  1. 오픈 소스 소프트웨어고,
  2. 디스크가 아닌 메모리 기반의 데이터 저장소이다. (In-Memory data structure store)
  3. NoSQL & Cache 솔루션이며 메모리 기반으로 구성된다.
  4. 명시적으로 삭제, expire를 설정하지 않으면 데이터는 삭제되지 않는다(영구적 보존)
  5. 여러대의 서버 구성 가능하다.
  6. 데이터베이스로 사용될 수 있으며, Cache로도 사용될 수 있는 기술이다.
  7. 성능은 서버에 따라 다르나 초당 2만 ~ 10만회 수행한다.
  • 용도
    : 레디스는 messsage queue, shared memory, remote dictionary 용도로 사용할 수 있다. 특히 remote dictionary로서 RDBMS(Relational Database Management System)의 캐시 솔루션으로 사용용도가 높다.
    => select 쿼리문을 날려 특정 데이터들을 fetch했을때, RDBMS구조상 disk에서 데이터 꺼내오는게 memory에서 읽어들이는 것보다 천배가량 더 느리기 때문.

  • 특징

1) Key-value store
: 레디스는 거대한 Map 저장소이다. Key, value가 매핑된 단순한 맵 데이터 저장소로서 데이터를 레디스에 쉽고 편하게 읽고 쓸 수 있다. 장점은 익히기 쉽고 직관적이나 단점은 key-value형태로 저장된 데이터를 레디스 자체내에서 처리하는 것이 어렵다.

2) 다양한 데이터 타입
: key로 참조되는 value타입을 다양하게 지정하여 저장할 수 있다. list, string, set, sorted set 등

3) Persistence
: 레디스는 데이터를 disk에 저장할 수 있다. 그래서 레디스는 서버가 shutdown된 후에 restart하더라도 disk에 저장해놓은 데이터를 다시 읽어서 데이터가 유실되지 않는다. 레디스 데이터를 disk에 저장하는 방식은 snapshot, AOF가 있다.
- snapshot: 스냅샷은 relational database에도 사용하고 있는 어떤 특정 시점의 데이터를 disk에 옮겨담는 방식을 뜻한다. blocking 방식의 save와 non-blocking의 bgsave방식이 있다.
- AOF: 레디스의 모든 write/update 연산 자체를 모두 로그 파일에 기록하는 형태. 서버가 재시작할 시 write/update를 순차적으로 재실행, 데이터 복구.

레디스 공식문서에는 rdbms의 롤백 시스템 같이 두 방식을 혼용해서 사용하는 것을 권장. 주기적으로 snapshot으로 백업하고 다음 snapshot까지의 저장을 AOF 방식으로 수행.

4) ANSI C로 작성

5) 서버 측 복제, 샤딩?지원


  • In-memory cache란
    : 메모리 캐시 기반의 제품이 사용되는 이유는 성능/ 캐시방식을 통해 db read의 부하를 감소할 수 있기 때문. 서비스 요청이 증가하여 db요청이 많아지면 db서버 부하가 증가하게 되는데 메모리 캐시가 적용되면 성늘 및 처리속도가 향상된다.

  • 장점

1) 리스트, 배열과 같은 데이터를 처리하는데 유용하다.

  • value 값으로 문자열, 리스트, Set, Sorted set, Hash 등 여러 데이터 형식을 지원.
  • 따라서 다양한 방식으로 데이터를 활용할 수 있다.
  • 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다고 한다.

2) 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우,
Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공

3) 메모리를 활용하면서 영속적인 데이터 보존

  • 명령어로 명시적으로 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
  • 스냅샷(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.

4) Redis Server는 1개의 싱글 쓰레드로 수행되며, 따라서 서버 하나에 여러개의 서버를
띄우는 것이 가능하다.

  • Master - Slave 형식으로 구성이 가능함
  • 데이터 분실 위험을 없애주는 것이 바로 위 Master - Slave 방식이다.

  • 레디스는 In memory 데이터베이스여서 모든 데이터를 메모리에 저장하고 조회한다. 메모리 접근이 디스크 접근보다 빠르기 때문에 빠름. 멤캐시드와의 큰 차이점은 다양한 자료구조를 지원한다는 것. 이게 중요한 이유 => 개발의 편의성과 난이도 때문.
  • 레디스는 트랜잭션의 문제도 해결해줄수있음/ 싱글 스레드로 동작하는 서버의 모든 자려구조는 atomic하기 때문에 race condition을 피해 데이터의 정합성을 보장하기 쉬움.
  • 즉, 외부의 collections을 잘 이용하는 것만으로 개발시간 단축이 가능.

출처:
https://engkimbs.tistory.com/869
https://codingmania.tistory.com/18 [괴발개발 개발새발 하는 개발자의 개발 블로그]

profile
졸꾸 !!!

0개의 댓글