Memcached 사용하기

Memcached 데몬
사이트 : http://www.danga.com/memcached/
다운로드 : http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

Memcached PHP Extension
사이트 : http://pecl.php.net/package/memcache
다운로드 : http://pecl.php.net/get/memcache-2.2.5.tgz

LibEvent
사이트 : http://monkey.org/~provos/libevent/
다운로드 : http://monkey.org/~provos/libevent-1.4.11-stable.tar.gz

Memcached 는 데이터를 메모리에 저장하여 이용할 수 있는 데몬이다. 분산처리가 가능하고 매우 빠른 성능을 지닌 캐시 이다.
(편의상 root로 작업)

1. Memcached 설치

우선 Memcached 를 적당한 디렉토리 (/usr/local/src) 등에 다운로드를 받는다.
# tar zxvf memcached-1.2.8.tar.gz
# cd memcached-1.2.8
# configure --prefix=/usr/local/memcached
* checking for libevent directory... configure: error: libevent is required 메세지가 나오면 libevent 라이블러리를 설치를 해줘야 한다.

# make
# make install

1-1 memcached 실행
# cd /usr/local/memcached (configure 에서 지정한 prefix로 이동)
# bin/memcached -u [실행될 사용자] &
* 실행될 사용자는 memcached 데몬이 -u 옵션으로 지정된 사용자로 실행이 된다 (root로 지정하면 안됨)
# netstat -na | grep 11211
->
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 :::11211 :::* LISTEN

포트를 확인한다.

2. Memcache PHP Extension
# tar zxvf memcache-2.2.5.tgz
# cd memcache-2.2.5
# phpize
# ./configure
# make
# cp .libs/memcache.so /(php 익스텐션 디렉토리) php.ini에서 지정한 extension_dir 에서 설정한 디렉토리
# php -m | grep memcache 로 모듈 확인
# /etc/init.d/httpd restart 또는 /usr/local/apache/bin/apachectl restart 로 Apache 재시작

PHP info 확인

사용자 삽입 이미지

3. Libevent 설치 (옵션)
* Memcache Configure 중 libevent 가 필요하다는 메세지를 보내고 중단이 되었을때 설치를 한다.

libevent 를 다운로드 받는다.
# tar zxvf libevent-1.4.11-stable.tar.gz
# cd libevent-1.4.11-stable
# ./configure
# make
# make install (/usr/local/lib 에 libevent.so 파일이 존재하는지 확인한다.)
# ldconfig (vi /etc/ld.so.conf 에 /usr/local/lib 추가를 한다.



PHP 의 환경 설정 파일에서 session 부분을 아래와 같이 변경 합니다.

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

위와 같이 셋팅을 합니다. 셋팅을 완료한 후에는 Apache 를 재시작 해주시면 설정이 적용이 됩니다.
PHP 세션을 file이 아닌 memcache를 이용해 저장을 하는 방식입니다. 다른 머신의 웹 서버에서 세션을 공유할 때 위와 같이 사용하시면 됩니다

PHP 테스트 소스.

 
01.<?
02. session_start();
03.
04. // 서버 정보 표시
05. echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'] . '<BR />';
06. echo 'SERVER_ADDR : ' . $_SERVER['SERVER_ADDR'] . '<BR />';
07. echo 'SERVER_SERVER_SOFTWARE : ' . $_SERVER['SERVER_SOFTWARE'] . '<BR />';
08. echo 'session.save_handler : ' . ini_get('session.save_handler') . '<BR />';
09. echo 'session.save_path : ' . ini_get('session.save_path') . '<BR /><BR />';
10.
11. // 세션이 정상적으로 생겼으면
12. if($_SESSION['check'])
13. {
14. echo 'increment count <br />' ;
15. // 카운트를 증가 시킨다.
16. $_SESSION['reflashCnt']++;
17. }
18. else
19. {
20. // 없을 경우 세션 정보를 입력한다.
21. echo 'create session information <br />' ;
22. $_SESSION['check'] = true;
23. $_SESSION['name'] = 'lovelgw';
24. $_SESSION['age'] = 21;
25. $_SESSION['reflashCnt'] = 0;
26. }
27.
28. foreach ($_SESSION as $key => $value)
29. echo $key . ' => ' . $value . '<br>';
30.
31.?>

사용자 삽입 이미지

서버에서 호출한 화면

사용자 삽입 이미지

localhost 에서 호출한 화면 (hosts 파일 변경 후 동작)

세션이 공유를 테스트 하기 위해 %SystemRoot%\system32\drivers\etc\hosts 파일을 변경하였습니다.
127.0.0.1 lovelgw.com
위와 같이 설정을 변경한다음 로컬 서버와 원격지와 세션을 공유 해보았습니다.

memcache 를 이용해 세션을 공유하는 방법입니다

2011/09/07 01:12 2011/09/07 01:12

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다