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 를 이용해 세션을 공유하는 방법입니다