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 |