1. redis(레디스)가 뭔가요? 많이 들어는 봤는데…..

레디스(REmote DIctionary Server) 는 메모리기반 key-value store(저장소) 입니다. 

redis 는 주로 두가지 용도로 많이 습니다.

1. 데이타(또는 페이지) 캐시

2. 세션 저장소 

세션 저장소로 사용할 경우 대용량 분산처리가 가능하며, 서브도메인 세션공유를 쉽게 처리할수 있습니다.

2. redis 설치 및 시작

   2.1 centos6.x 에서 redis 설치 (centos7 도 동일)

[root@vultr ~]# yum install redis
.....
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : redis-3.2.11-1.el6.x86_64                                                                                                  1/1
  Verifying  : redis-3.2.11-1.el6.x86_64                                                                                                  1/1
 
Installed:
  redis.x86_64 0:3.2.11-1.el6
 
Complete!
[root@vultr ~]#
#기본실행 서비스에 등록해둡니다.
[root@vultr ~]# chkconfig redis on
[root@vultr ~]# service redis start
Starting redis-server: [ OK ]
 
# redis-cli 로 정상 접속되는지 확인합니다.
[root@vultr ~]#
[root@vultr ~]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> quit
[root@vultr ~]#

2.2 ubuntu 에서 설치

root@vultr:~# sudo apt-get install redis-server
Suggested packages:
  ruby-redis
Do you want to continue? [Y/n] y
root@vultr:~# 
#redis-server를 자동실행 서비스에 등록한다.
root@vultr:~# sudo apt-get install sysv-rc-conf
root@vultr:~# sysv-rc-conf redis-server on
 
root@vultr:~# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> quit
root@vultr:~#

3. phpredis 설치

PHP 에서 redis 를 사용하기 위해서는 phpredis 라는 php 모듈이 필요합니다. 모듈을 컴파일해서 설치해야합니다. 어렵지 않음으로 순서만 잘 이해하면 됩니다.

먼저 php설치정보를 확인해야 합니다. php -i  나 웹페이지에서 phpinfo() 를 확인합니다.

화면에서 php.ini 의 설치위치를 잘봐둡니다. 제 서버는 /usr/local/php/etc/php.ini 에 위치하고 있네요.

phpredis 를 다운받아 컴파일 해야 합니다. 컴파일 순서는 아래와 같습니다.

  1. phpredis 최신 버전을 다운받습니다. git 을 통해 받거나, wget 으로 받으시면 됩니다.
  2. 다운받은 파일을 압축을 해제한다음, 디렉토리로 이동합니다.
  3. phpize 를 실행해줍니다. phpize 를 찾이못한다면, 풀경로로 실행합니다.
  4. configure 를 실행합니다. 이때 php 가 설치된 php-config 정보를 넣어줍니다.
  5. make, make install 을 실행해줍니다.
[root@vultr ~]# wget https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip
Saving to: “phpredis.zip”
[root@vultr ~]# unzip phpredis.zip
[root@vultr ~]# ll
total 228
drwxr-xr-x 5 root root   4096 Sep 27 14:59 phpredis-phpredis-24e7859
-rw-r--r-- 1 root root 224711 Nov  9 21:45 phpredis.zip
[root@vultr ~]#
[root@vultr ~]# cd phpredis-phpredis-24e7859/
[root@vultr phpredis-phpredis-24e7859]# phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@vultr phpredis-phpredis-24e7859]#
#만약 phpize 를 못 찾는다면 # /usr/local/php/bin/phpize 처럼 전체 경로로 실행
#configure 실행
 
[root@vultr phpredis-phpredis-24e7859]# ./configure --with-php-config=/usr/local/php/bin/php-config
......
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
[root@vultr phpredis-phpredis-24e7859]#
 
#컴파일
[root@vultr phpredis-phpredis-24e7859]# make
...
Build complete.
Don't forget to run 'make test'.
[root@vultr phpredis-phpredis-24e7859]# 
[root@vultr phpredis-phpredis-24e7859]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@vultr phpredis-phpredis-24e7859]#

위에서 make install 후 출력되는 경로를 잘 확인해두어야 합니다. 나중에  php.ini 에 추가할 예정

 /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

php.ini 파일을 수정해 주어야 합니다. php.ini 파일 위치는 아까 phpinfo()에서 확인하였습니다. php.ini 파일을 열어서 마지막에 아래 라인을 추가해줍니다. 저장후 php-fpm 을 재시작하고 다시 phpinfo()를 보시면 php에 redis 모듈이 표시되는걸 확인할수 있습니다. 세션 정보도 redis 로 변경합니다.

[redis]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/redis.so
session.save_handler = redis
session.save_path = “tcp://127.0.0.1:6379”

[root@vultr phpredis-phpredis-24e7859]# vi /usr/local/php/etc/php.ini
 
[redis]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/redis.so
session.save_handler = redis
session.save_path    = "tcp://127.0.0.1:6379"
:wq
 
[root@vultr phpredis-phpredis-24e7859]# php -i | grep redis
redis
Registered save handlers => files user redis rediscluster
session.save_handler => redis => redis
PWD => /root/phpredis-phpredis-24e7859
_SERVER["PWD"] => /root/phpredis-phpredis-24e7859
This program is free software; you can redistribute it and/or modify
[root@vultr phpredis-phpredis-24e7859]#

4. 마지막으로 php로 redis 테스트

<?php
$redis_host = "127.0.0.1";
$redis_port = 6379;
echo "<h1>redis 테스트<h1><br/>";
try {
    $redis = new Redis();
    $redis->connect($redis_host, $redis_port, 1000);
    $key = "mytest:first_key:incr_test"; //키분류는 :(콜론)을 찍는게 일반적
    $value = $redis->get($key);
    echo "value : ".$value."<br>";
    $redis->incr($key); //테스트를 위해 값증가
    $redis->expire($key, 3); //3초만 유지함.
} catch(Exception $e) {
    die($e->getMessage());
}
?>

해당 소스를 저장후 웹페이지서 테스트를 하면, 처음 value가 없다가 새로고침 할때마다 1씩 증가합니다. 3초간 기다렸다가 다시 새로고침하면, 초기화 되는걸 볼수 있습니다.

phpredis 의 자세한 사용법은 https://github.com/phpredis/phpredis  를 참고하세요.

 

 

5. 끝으로..

그누보드5 (영카트) 에서 사용할때 주의점

그누보드5의 common.php 에는 session 설정과 관련된 코드가 들어 있습니다. redis 를 session 저장소로 사용하는 경우 session.save_path 를 수정하면 안됩니다.  /common.php 파일 190번 라인에 있는 아래 코드를 주석 처리 합니다.

//session_save_path(G5_SESSION_PATH);

 

 

출처 : http://blog.bongwork.com/archives/44

+ Recent posts