NoSQL Redis : Remote Dictionary Sever. (advanced key-value store)

2013. 6. 29. 11:20DB&NoSQL/Redis

공식 소개 사이트 : http://redis.io/

Download : https://github.com/dmajkic/redis/downloads

한글로 정리 해 놓은 곳 :  http://blog.saltfactory.net/65

출처 : Rdis 모듈 , 작성자 돌 : http://blog.naver.com/musasin84/60189890399


1. 개요
예전 DBMS는 관계형 DBMS(Oracle, mysql, sql, sqlite )이 유행.
하지만 어플리케이션 개발 방법이 이전과 달라지면 특정 부분만 읽거나 입력이 빈번하거나 어플리케이션이 요구하는 방법이 다양해지면서 RDBMS보다 좀 더 효율적인 데이터 저장 방법이 필요해져서 NoSQL에 대한 연구가 활발해지게 되었다
.
어플리케이션의 목적과 데이터 처리의 목적에 맞게 NoSQL에 대한 연구가 진행되면서, NoSQL의 형태도 다양하게 연구가 되어지고 있고 각각 특성이 모두 다른 것이 특징이다
.
이중에서 Redis 가 있는데.. 요것은 NoSQL 중에 하나다
.

2. Redis
설명

Remote Dictionary Server
의 약자, 오픈 소스 advanced Key-value 저장소.
redis
key 들과 strings, hashes, lists , sets 그리고 stored set 으로 저장되는 data structure server 라고도 할수 있다
.
redis
는 메모리를 캐시처럼 사용하면서 데이터를 빠르게 입출력할수 있는 저장소의 개념으로, 매우 빠른 성능을 가지는 것이 장점! (Redis는 영구적인 데이터의 저장을 위해 디스크와 같은 비휘발성 매체에 정기적으로 데이터 세트의 스냅 샷 파일을 덤프하여 저장하고 다시 시작할 때 이전의 상태를 복원하도록 해준다.
또한 이러한 메모리 데이터 집합들은 비동기적으로 디스크에 내려 쓰기를 실행해서 데이터를 보존한다.

Redis VMWare에서 지원해주는 NoSQL이라서 안정적으로 계속적으로 연구가  지속.. 특히 github, blizzard, dig, stackoverflow 등 굵직한 서비스에서 사용되어 그 인기가 매우 높은 편.

요즘(이게 2011년이니.. 시간이 좀 지났네..) RDBMS로만 구성하기 보다 redis 등과 함께 persistence를 구성하는게 대세인 것 같다
.

다른 블로그(http://blog.naver.com/pdc222?Redirect=Log&logNo=140189072474)를 검색해봤는데
이분의 의견은 가볍고,관리가 쉽고, 성능이 기대보다 좋고, 기가막힌 persistence 를 제공한다고 했고,
sub/pub 기능을 이용하여 실시간 플랫폼을 구현하는 건 생각보다 안정적으로 관리면에서 이슈가 크게 없다고 하였다. 하지만 가장 큰 문제는 mass 데이터에 대한 문제라고 한다.

물리적인 메모리 크기 한계로 인해 큰 데이터 처리가 향후 자체 라우팅 알고리즘에 의한 분산 데이터를 지원해주는 것을 기대하고 계셨다
.

3.
설치

 redis
의 또하나의 장점은 redis의 클라이언트가 매우 다양한 언어를 지원한다. ( http://redis.io/clients ).
그냥 다운 받아서 적당한 곳에 압축해제하면 설치는 끝

4. 서버 가동


  해당 폴더안에는 여러가지 실행파일들중, 그중에 redis-server 를 실행하면 서버가 작동
  이중에 redis.conf 파일은 Redis 설정 파일이다.

 

5. 클라이언트로 접속


압축푼 곳에서 클라이언트 실행
CMD> redis-cli –h 127.0.0.1 –p 6379
이 상황에서는 서버 콘솔에서 Client를 감지할수 있다.
여기서 info를 때려 넣어 보다
.

version, git_sha1, git_dirty,bits….
다양한 정보들이 나온다.

 

6. Command 실행


기본적으로 공식 사이트에서 redis commands 를 정의하고 설명이 잘되어 있는데다가, Example이라는 박스 안에서 직접 명령어를 입력해 가면서 예제를 바로 테스트 할 수 있게 되어 있다. Redis에 저장되는 값은 key/value 로 이뤄진다.
기본적으로 String에 대한 핸들만 할수 있는 GET SET에 대한 부분을 공부해보자
!
String
값을 저장하고 얻고는 아래와 같은 명령어로 한다
.


set “key” “value”   /   get “key”

 (1) Set key to hold the string value. If key already holds a value, it is overwritten, regardless of its type. Any previous time to live associated with the key is discarded on successful SET operation.
 (2) GET key : Get the value of key. If the key does not exist the special value nil is returned. An Error is returned if the value stored at key is not a string, because GET only handles string values)
cmd) set myname seunghyun
cmd) get myname

그럼 서버 콘솔에서는 메모리에 저장된 key값을 감지하여 출력한다
.
이로써 이값은 다른 클라이언트와 공유가 가능하다.

7. 테스트 환경


MSET를 사용하여 key value 를 만든다.
MSET
Multiple Set을 할 수 있는 명령어인데 key value의 쌍을 입력할 때 사용한다
.
MSET key1, value1 , key2, value2….. keyN ,valueN
이렇게 해서 위의 GET을 이용해서 값을 가져온다
.


(1) KEYS
 key를 가져오는 방법은 pattern을 이용해서 가져온다
.
 keys *  :
모두 가져와

 keys t?? :
첫 단어 t로 시작 하고 나머지는 모르겠는데 3..
 keys *o* :
가운데.. 3


(2) RANDOMKEY
 randomkey
는 현재 선택된 database 안에 존재하는 key를 임의로 선택하는 명령어이다.
 
어따? 쓰지
?


(3) EXISTS
  해당 키가 있는지 없는지 확인하는 명령어, 결과값은 integer 값으로 카운트를 주네요
.
  Exist one


(4) RENAME
  key 이름을 변경하네.. 혹시.. 기존에 변경하다가 기존에 있는 값이면
..
  rename one three
 
우헹.. 사라지네.. 아무런 노티없이… get 으로 value 값 확인하니.. 1 이라고 나온거 보니
..
 
기존 three의 값이 사라져 버렸군요
.


(5) RENAMENX
  위와 같이 이미 존재하는 것을 변경하면 0을 반환..그렇지 않으면 그냥 변경..후 변경된 결과를 integer 1로 리턴 ,  위와 같은 문제로 인해 만든 명령어라고 생각됨
.


(6) DEL
  DEL
key를 삭제하는 명령어인데 key를 여러 개 한번에 삭제 가능

  DEL key1 key2 …. KeyN


(7) TTL
  TTL
key life를 확인하는 명령어.. life다음에 나오는 expire 명령을 통해 timeout을 지정하고 난 뒤 TTL을 확인하면 얼만큼의 timeout이 남았는지 알수 있다.


(8) Expire
  몇초후에 삭제 해드리는 명령어다위의 TTL 로 확인할 수 있다
.
  ExpireAT
unix 시간으로 설정 가능하다. (1970 1 1일 기준으로 해서 초시간을 입력하는 것귀찮게 시리뭐 이렇게
)


(9) TYPE
  Type은 key에 저장된 value 의 타입을 확인하는 명령어이다
.
 
데이터 타입을 위해서 SET,LPUSH,SADD를 이용하여 데이터를 입력한 뒤 Type으로 value 의 타입을 확인해 보도록 하라, LPush는 추후 다룬데.. list에 값을 추가할 때 사용하는 명령어 SADD Set에 갓을 추가할 때 사용하는 명령어래(모르겠다
..)
  Type one
 
è String


현재 데이터베이스의 key를 다른 데이터베이스로 옮기는 것도 존재하고 sort하는 명령어등 여러 명령어가 있다는데.. .. 계속 공부하란다..

이제 한 과 정도이고 명령어는 본 사이트에 가면 다 있다...
이런 것 보다 실무에서 어떤식으로 사용되는지도 참으로 궁금할시오다.
그걸 찾아 보도록 하겠습니다.