redis

INSANEZINDOL·2021년 11월 25일
0
post-thumbnail
  1. Intro
  • Redis는 "REmote DIctionary System"의 약자로 메모리 기반의 Key/Value Store 이다.
  • Cassandra나 HBase와 같이 NoSQL DBMS로 분류되기도 하고, memcached와 같은 In memory 솔루션으로 분리되기도 한다.
  • 성능은 memcached에 버금가면서 다양한 데이터 구조체를 지원함으로써 Message Queue, Shared memory, Remote Dictionary 용도로도 사용될 수 있다.
  • BSD 라이센스 기반의 오픈 소스이며 최근 VMWare에 인수되어 계속해서 업그레이드가 되고 있다.
  • 16,000 라인정도의 C 코드로 작성되었으며, 클라이언트 SDK로는 Action Script, C, C#, C++, Clojure, Erlang, Java, Node.js, Objective-C, Perl, PHP, Python, Smalltalk, Tcl 등 대부분의 언어를 지원한다.
  1. Key/Value Store
  • Redis는 기본적으로 Key/Value Store이다. 특정 키 값에 값을 저장하는 구조로 되어 있고 기본적인 PUT/GET Operation을 지원한다. 단, 이 모든 데이터는 메모리에 저장되고, 이로 인하여 매우 빠른 write/read 속도를 보장한다. 그래서 전체 저장 가능한 데이터 용량은 물리적인 메모리 크기를 넘어설 수 있다. (물론 OS의 Disk Swapping 영역등을 사용하여 확장은 가능하겠지만 성능이 급격하게 떨어지기 때문에 의미가 없다.) Data Access는 메모리에서 일어나지만 Server Restart 와 같이 서버가 내려갔다가 올라오는 상황에 데이터를 저장을 보장하기 위해서 Disk를 Persistence Store로 사용한다.
  1. 다양한 데이터 타입

redis가 Key/Value Store이기는 하지만 저장되는 Value가 단순한 Object가 아니라 자료구조를 갖기 때문에 큰 차이를 보인다. redis가 지원하는 데이터 형은 크게 아래와 같이 5가지가 있다.

1) String

일반적인 문자열로 최대 512mbyte 길이 까지 지원한다.

Text 문자열 뿐만 아니라 Integer와 같은 숫자나 JPEG같은 Binary File까지 저장할 수 있다.

명령어 : http://redis.io/commands#string

2) Set

set은 string의 집합이다. 여러개의 값을 하나의 Value 내에 넣을 수 있다고 생각하면 되며 블로그 포스트의 태깅(Tag)등에 사용될 수 있다.

재미있는 점은 set간의 연산을 지원하는데, 집합인 만큼 교집합, 합집합, 차이(Differences)를 매우 빠른 시간내에 추출할 수 있다.

명령어 : http://redis.io/commands#set

3) Sorted Set

set 에 "score" 라는 필드가 추가된 데이터 형으로 score는 일종의 "가중치" 정도로 생각하면 된다.

sorted set에서 데이터는 오름 차순으로 내부 정렬되며, 정렬이 되어 있는 만큼 score 값 범위에 따른 쿼리(range query), top rank에 따른 query 등이 가능하다.

명령어 : http://redis.io/commands#sorted_set

4) Hashes

hash는 value내에 field/string value 쌍으로 이루어진 테이블을 저장하는 데이터 구조체이다.

RDBMS에서 PK 1개와 string 필드 하나로 이루어진 테이블이라고 이해하면 된다.

명령어 : http://redis.io/commands#hash

5) List

list는 string들의 집합으로 저장되는 데이터 형태는 set과 유사하지만, 일종의 양방향 Linked List라고 생각하면 된다. List 앞과 뒤에서 PUSH/POP 연산을 이용해서 데이터를 넣거나 뺄 수 있고, 지정된 INDEX 값을 이용하여 지정된 위치에 데이터를 넣거나 뺄 수 있다.

명령어 : http://redis.io/commands#list

profile
Java Backend Developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN