Redis 설치 및 HTTP interface 사용

Redis는 메모리 기반 No-Sql 데이터베이스이다.
대용량 서비스를 손쉽게 만들기 위한 캐쉬로도 사용되며
해쉬, 셋, 스코어 기반 소트 등 다양한 기능을 제공한다.
2015년 6월 현재 v3.0.2 버전까지 나와 있다.

HomePage : http://redis.io
Download : http://download.redis.io/releases/redis-3.0.2.tar.gz
Document : 함수 설명 http://redis.io/commands

우분투 서버의 경우 apt-get install 명령으로 손쉽게 설치 할 수 있다.
* 참고: http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/REDIS/IntroDataType

$ apt-get install redis-server

$ redis-server --version
Redis server v=3.0.2 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=9dc30f86cf347ee3

$ ps -ef | grep redis
redis     1743     1  0 15:56 ?        00:00:01 /usr/bin/redis-server 127.0.0.1:6379

# 기본 설정인 redis.conf의 복사본으로 redis_6397 서비스가 설정된다
$ sudo service redis_6379 stop
$ sudo service redis_6379 start

$ ls -l /etc/redis
-rw-r--r-- 1 root root 36223  6월  7 17:47 6379.conf
-rw-r--r-- 1 root root 30176  1월 14  2014 redis.conf
-rw-r--r-- 1 root root  5662  1월 14  2014 sentinel.conf

# 실행 파일은 /usr/local/bin 에 설치되었다
$ ls -l /usr/local/bin/redis*
-rwxr-xr-x 1 root root 2170200  6월  7 13:18 redis-benchmark
-rwxr-xr-x 1 root root   29283  6월  7 13:18 redis-check-aof
-rwxr-xr-x 1 root root   62091  6월  7 13:18 redis-check-dump
-rwxr-xr-x 1 root root 2323920  6월  7 13:18 redis-cli
lrwxrwxrwx 1 root root      12  6월  7 13:18 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 4499922  6월  7 13:18 redis-server

Redis 사용을 위해서는 Client(Tools)를 설치해야 한다.

# 접속을 원하는 클라이언트 어디나 설치하면 된다 (서버에 IP로 접속)
$ apt-get install redis-tools

# 설치 테스트: Redis 서버에 ping 날리기
$ redis-cli -h 127.0.0.1 ping
PONG

Redis를 영속적으로 사용하기 위해서는 Persistence 설정을 해야 한다.
두가지 방식이 있는데 1) Snapshot 과 2) AppendOnly 이다.

이에 대한 설명을 한 원문 페이지가 있지만, 한글로 번역된 페이지도 있다.
Redis Persistence 번역 : http://dol9.tistory.com/150

가장 좋은 방법은 AppendOnly에서 everysec 옵션으로 설정하는 것이다.

$ vi /etc/redis/6397.conf
...

appendonly yes

appendfilename "appendonly.aof"

# 매번 저장하는 always, 수동 방식이 no
appendfsync everysec

...

Redis 설치 후 기본적인 기능을 테스트 해 본다.

$ redis-cli -h 127.0.0.1

# 가장 기본적인 set과 get : 값 하나씩 처리
> set mykey myvalue
OK
> get mykey
"myvalue"

# 카운터 연산자
> set counter 1000
OK
> INCR counter 
(integer) 1001
> INCR counter
(integer) 1002
> INCRBY counter 50
(integer) 1052

# 값 여러개를 한꺼번에 set, put
> MSET key1 "Hello" key2 "world"
OK
> get key1
"Hello"
> get key2
"world"
> mget key1 key2
1) "Hello"
2) "world"

# rpush는 리스트의 오른쪽, 즉 tail에 값을 붙인다
> rpush mylist A
(integer) 1
> rpush mylist B
(integer) 2
> lrange mylist 0 -1
1) "A"
2) "B"

# lpush는 리스트의 왼쪽, 즉 head에 값을 붙인다
> lpush mylist first
(integer) 3
> lrange mylist 0 -1
1) "first"있다있다
2) "A"
3) "B"

# 여러개의 값을 리스트에 push 할 수 있다
> rpush mylist 1 2 3 4 5 "foo bar"
(integer) 9

# 왼쪽부터 리스트내의 범위를 지정하여 출력
> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "1"
5) "2"
6) "3"
7) "4"
8) "5"
9) "foo bar"

# lpop 으로 head 값을, rpop 으로 tail 값을 꺼내온다
> lpop mylist
"first"
> rpop mylist
"foo bar"

Redis는 각 언어별 API를 통해 직접 통신하기도 하지만
Webdis 모듈을 이용해 HTTP API를 설정하면 더 다양하게 이용할 수 있다.
* 기본적으로 json 포맷으로 출력하므로 웹프로그래밍 시에 사용하기 편하다.

Git Hub : https://github.com/nicolasff/webdis

Redis가 사용하는 포트는 6379, Webdis가 사용하는 포트는 7379 이다. (기본값)

이미지를 출력할 수 있고
webdis-get_image

리스트를 출력할 수 있고 (기본적으로 json 포맷이다)
webdis-lrange_list
값을 지정하거나 변경할 수도 있다.
webdis-set_incrby

** 주의
redis-server 가 재시작되면, webdis 도 재시작해야 한다.

Webdis를 서비스로 만들기 위해서 아래 문서를 참고한다.

* 우분투용 init 스크립트
https://gist.github.com/xiangjian/1568696

* 우분투에서 서비스 등록하기
http://www.aboutlinux.info/2006/04/enabling-and-disabling-services-during_01.html

<참고>
Webdis를 AngularJS에서 사용하는 모듈도 나와있다.
Git Hub : https://github.com/adamgoose/angular-webdis

 

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: