2013. 6. 29. 11:20ㆍDB&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하는 명령어등 여러 명령어가 있다는데.. 뭐.. 계속 공부하란다..
이제 한 과 정도이고 명령어는 본 사이트에 가면 다 있다...
이런 것 보다 실무에서 어떤식으로 사용되는지도 참으로 궁금할시오다.
그걸 찾아 보도록 하겠습니다.