본문 바로가기
2021-1/RDA

NoSQL | Redis (휘발성/영속성 ket-value 형 스토어)

by 이망고_ 2021. 10. 5.

Redis

Salvators Sanfilippo 가 개발한 오픈소스 소프트웨어

휘발성이면서 영속성을 가지고 있어 NoSQL 데이터베이스 중 memcached 와 Tokyo Tyrant 사이에 위치해 있는 key-value 형 스토어라고 할 수 있다

Redis 를 사용하는 이유

  • 배열 형식의 데이터에 특화 
    • 리스트나 set 과 같은 배열 형식의 데이터를 다루는 데에 특화되어 있다
    • 배열 형식 데이터의 추가나 출력이 빠른 속도로 이루어 진다 
  • 데이터의 정합성 
    • memcached 나 Tokyo Tyrant 로 데이터를 갱신 할 때 : 데이터 읽어내기-갱신-입력 의 과정 필요
    • Redis 에서는 이런 일련의 처리를 Atomic 하게 처리하는 명령어가 제공되어 데이터 부정합 예방 가능
    • * Atomic : 일련의 작업을 하나의 명령으로 처리한다
memcached 에서 Atomic 하게 처리(카운터)

CAS(Compare-and-Swap 혹은 Check and Set 의 약어) 라는 조작을 통해 데이터 정합성 보장 가능

  • CAS 조작 : gets, cas 라는 두가지 명령어를 사용하여 데이터의 부정합을 방지 
  • gets : 데이터를 읽어오는 명령어, cas : e데이터를 입력하는 명령어 
  • gets 명령어 사용 : 데이터뿐 아니라 cas id (갱신되는 값) 라고 불리는 값도 가져오게 된다

특징

  • 기본적으로 데이터를 메모리에 보존 : 처리 속도가 크게 빠르다
  • Snapshot : 데이터를 디스크에 기록, 영속화 기능
    • 메모리에 있는 데이터의 Snapshot을 파일(*.rdb) 에 기록하여, 이후 재기동할 때 Snapshot 의 내용을 메모리에서 읽어와 지난번 Snapshot 상환까지 재현할 수 있다 

장점

value 로 문자열, 리스트, SET, Sorted Set, Hash 형 등 여러 데이터 형식을 지원

  • 문자열 : Redis 에서 가장 기본이 되는 데이터형. 문자열에는 JPEG 이미지나 시리얼라이즈된 Ruby Object 등도 저장 가능
  • 리스트 : 문자열의 리스트. 새로운 값을 리스트 처음이나 마지막에 추가 가능, 리스트의 길이에 상관없이 PUSH 나 POP 등의 조작이 O (즉, 리스트 길이에 관련없이 일정한 시간에 처리가능)에 처리되는 것을 보장
  • SET :  문자열의 순서가 지정되지 않은 집합. 중복이 없는 여러 개의 멤버를 갖는다. 멤버의 추가, 삭제, 검색은 모두 O 에 가능합니다. 간단한 집합연산 가능
  • Sorted Set 
    • SET 형과 비슷 : score 라는 값을 가진다는 차이점이 있다
    • 리스트형과 비슷 : score 순으로 정렬되어 있다
  • Hast 형 : Hash 형은 순서 없이 문자열과 값이 짝지어 있는 것. 일반적인 연상 배열(Hash)과 같은 형식

약점

도입 사이트가 적다

가상 메모리 기능

OS에서 사용하는 SWAP 과 동일

Redius 에서는 Linux 커널을 참고하여 단독으로 구현 :

  • 데이터의 압축률을 높일 수 있다
  • 데이터가 실제 메모리 크기 이상으로 늘어났을 때도 전체 key 값만 메모리에 두고 사용이 가능하다
  • key 에 의해 데이터를 읽어오는 것도 빠르게 처리 가능하다 : 100만개의 key - 160MB 메모리

도입 사례

github, dig, 니코니코 생방송에서 시청자수 count 및 최신 방송 전체보기 등

* 니코니코 : 일본의 Youtube 라고 할 수 있는 동영상 서비스 사이트

사용 케이스

  • 타임라인을 표시하는 웹 어플리케이션에서 사용
  • 배열 형식 데이터에 빈번한 추가, 삭제가 일어남

'2021-1 > RDA' 카테고리의 다른 글

NoSQL | Cassandra  (0) 2021.10.05
NoSQL | MongoDB (문서형 데이터베이스)  (0) 2021.10.05
NoSQL | Tokyo Tyrant ( 영속성 key-value형 스토어)  (0) 2021.10.05
NoSQL | memcached  (0) 2021.10.05
NoSQL | 이해하기  (0) 2021.10.05