IT Log

Redis 본문

기타

Redis

newly0513 2019. 5. 7. 11:02
728x90
반응형

Redis란?

  • Remote Dictionary Server의 약자로, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.

 

장점

  • 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청할 경우, atomic 처리로 데이터 부정합 방지 atomic처리 함수를 제공
  • 메모리를 활용하면서 영속적인 데이터 보존
  • Redis Server는 1개의 싱글 스레드로 수행된다.
  • 쓰기 성능 증대를 위한 샤딩을 지원
  • ANSI C로 작성 : ANSI C 컴파일러가 동작하는 곳이면 어디든 설치 및 실행가능
  • Redis 클라이언트는 대부분의 언어로 포팅되어 있다.
  • 서버 간 이벤트 공유를 위한 Publish/Subscribe 기능 지원
  • 100000QPS(Query Per Second)의 고성능

 

데이터 타입

type 설명
Strings 기본적인 데이터 타입
Lists 삽입 순서에 따라 정렬된 문자열 모음
Sets 고유하고 정렬되지 않은 문자열
Sorted Sets 정렬된 집합
Hashes 값과 관련된 필드로 구성된 맵 (필드와 값은 모두 문자열)
Bit arrays 특수 명령을 사용하여 비트 배열과 같은 문자열 값
HyperLogLogs Set의 카디널리티를 추정하기 위해 사용되는 확률적 데이터구조
Streams 로그 데이터 유형을 제공하는 유사한 항목의 추가전용 모음

 

String

command sample
SET key value [ NX | XX ] set mykey 10
GET key get mykey

 

Lists

command sample
RPUSH key value [value...] rpush list a b c
LRANGE key start stop lrange list 0 3

 

Sets

command sample
SADD key member [member ...] sadd set a b c
SMEMBERS key smembers set

 

Hashes

command sample
HMSET key field value [field value...] hmset mykey field1 hello field2 world

HMGET key field [field...]

HGET key field

hmget mykey field1 field2

hget mykey field1
hget mykey field2

 

Sorted Sets

command sample
ZADD key [NX|XX] [CH] [INCR] score member [score member...] zadd myset 1 one
zadd myset 2 two
ZRANGE key start stop [WITHSCORES] zrange myset 0 1

 

https://redis.io/commands 에 접속하면 command에 관해서 자세히 알 수 있다.

 

Redis 성능 개선 설계

  • Replication : 읽기 성능 확장
  • Sharding : 쓰기 성능 향상
용어 설명 구성 유형
Replication 동일 데이터를 다수의 레디스 서버에 중복 분산 저장함으로써, 클라이언트에게 레디스 서버 보유 데이터에 대한 구성 내역 및 위치 투명성을 제공 싱글, 다중, 계층적
Sharding 단일 데이터 세트를 특정 조건에 따라 하나 이상의 레디스 서버에 분할 분산 저장해 쓰기성능 확장 vertical, range, hash based

 

Replication

  • Master / Slave 구조를 사용
  • Master 노드는 쓰기 전용으로 활용하며, Slave노드는 읽기 전용으로 활용하는 읽기와 쓰기의 명시적인 분리구조
  • 클라이언트 어플리케이션의 복잡도가 증가하는 제한점
  • Master노드는 하나 이상의 Slave노드들에게 데이터 원본ㅇ르 제공해 주는 역할을 하며, 슬레이브 노드는 마스터 노드에 최초 접속시 전체 데이터를 수신해 동기화한 뒤 이후에는 변경 데이터만을 수신해 지속적으로 데이터 동기화를 유지
  • Master노드의 위치 정보를 Slave노드가 보유하는 특성을 가지며, Slave노드 추가 시 마스터 노드의 설정 변경이나 재시작이 필요하지 않은 실시간 동적 확장성을 제공
  • 동적확장성은 용량,성능 확장시 서비스 구성요소의 재기동 등으로 인해 서비스가 중단되는 일이 없는 확장성을 지원

 

Sharding

  • 데이터 세트 분할 분산 저장
  • Redis에 저장, 활용하는 데이터 세트의 크기 확대
  • 쓰기 요청에 대한 성능 개선
    - 동일 데이터 세트 중복 분산 저장 시에는 저장할 수 있는 데이터 세트의 크기가 마스터 노드의 물리 메모리 용량을 초과할 수 없다
    - Master노드는 Slave노드에 데이터를 복제하기 위해 fork함수를 통해 child프로세스를 생성하는데, 이 때 child프로세스는 parent프로세스와 메모리 영역을 공유하지만, fork 이후 데이터 변경이 발생하는 메모리 페이지는 지연기록 매커니즘에 의해 child프로세스의 고유 메모리 영역으로 복사
유형 설명
Vertical Sharding 데이터 성격을 기준으로 논리적으로 분할
Range Sharding Key Value에 따라 데이터가 저장될 노드를 결정
Hash based Sharding key의 hash 값에 따라 데이터가저장될 노드를 결정

 

데이터 영속성

  • 기본적으로 메모리에 데이터를 저장하고 활용하는 구조
  • 실제 상용 서비스가 데이터 손실을 감내할 수 없는 여건이라면 휘발성 저장매체인 메모리가 제공해 주지 못하는 데이터 가용성은 스냅샷 또는 AOF을 활용함으로써 확보
  • 스냅샷과 AOF를 활용함으로써 데이터 손실을 최소화하고 필요한 경우 유실된 데이터를 복구
유형 설명
스냅샷
  • 특정 시점의 메모리내용을 dump.rdb 파일로 디스크에 저장
  • 스냅샷 생성을 위해 fork함수를 통해 child 프로세스 생성
  • child 프로세스는 지연기록의 특성상 최초에는 parent프로세스와 메모리영역을 공유하며, fork이후 변경데이터만 child 프로세스 고유메모리 영역에 복사
AOF Redis 인스턴스가 수신하는 모든 쓰기 명령을 AOF 파일에 기록

 

 

728x90
반응형

'기타' 카테고리의 다른 글

Tensorflow (2)  (0) 2019.05.08
TensorFlow  (0) 2019.05.07
Cassandra  (0) 2019.05.07
MongoDB  (0) 2019.05.07
NoSQL  (0) 2019.05.07
Comments