Memcached 는 데이터를 메모리에 저장하며 분산처리가 가능하고 매우 빠른 성능을 지닌 캐시 입니다.
- libevent 설치
Memcached 는 libevent 를 필요로 하므로 먼저 설치를 진행하겠습니다.
http://monkey.org/~provos/libevent/
[root@yongobk ~]# cd /usr/local/src
[root@yongobk ~]# wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
[root@yongobk ~]# tar xzvf libevent-1.4.13-stable.tar.gz
[root@yongobk ~]# cd libevent-1.4.13-stable
[root@yongobk ~]# ./configure
[root@yongobk ~]# make ; make install
- Memcached 설치
아래 주소에서 최신버전을 다운로드 하고 설치를 진행합니다.
http://code.google.com/p/memcached/downloads/list
[root@yongobk ~]# cd /usr/local/src
[root@yongbok ~]# wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
[root@yongbok ~]# tar xzvf memcached-1.4.4.tar.gz
[root@yongbok ~]# cd memcached-1.4.4
[root@yongbok ~]# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local
[root@yongbok ~]# make ; make install
- Memcached 실행
[root@yongbok ~]# /usr/local/memcached/bin/memcached -u nobody &
- Memcached PHP Extension 설치
http://pecl.php.net/package/memcache
[root@yongobk ~]# cd /usr/local/src
[root@yongbok ~]# wget http://pecl.php.net/get/memcache-2.2.5.tgz
[root@yongbok ~]# tar xzvf memcache-2.2.5.tgz
[root@yongbok ~]# cd memcache-2.2.5
[root@yongbok ~]# /usr/local/php5/bin/phpize
[root@yongbok ~]# ./configure --with-php-config=/etc/php/bin/php-config
[root@yongbok ~]# make ; make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
php.ini 파일에 아래 내용 추가 합니다.
[root@yongbok ~]# vi /usr/local/apache2/conf/php.ini
[memcache]
extension_dir=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
extension=memcache.so
memcache.allow_failover=1
memcache.max_failover_attempts=100
memcache.chunk_size=32768
memcache.default_port=11211
- Apache 재시작
[root@yongbok ~]# /usr/local/apache2/bin/apachectl restart
- PHP 에 Memcached 가 적용 되어 있는지 확인
[root@yongbok ~]# echo '' > /var/www/phpinfo.php
참고
http://www.ibm.com/developerworks/kr/library/os-php-fastapps3/
[세션을 메모리캐싱을 사용할 경우 주의 사항 ]
memcache를 사용하는 중 세션 정보가 유지되지 않아 그것을 해결하는데
많은 시간을 소비하였습니다. 저의 경우 모델자체를 세션에 저장하였었는데 그것의 데이터가 많아지면 저절로 기존 데이터가 사라지는 것이었습니다. 그래서 필요한 데이터만 저장하니까 그러한 문제는 발생되지 않았습니다
memcached + Session Database
- memcached의 원래 목적이 데이터베이스나 파일 데이터를 캐시하는 것임
- 세션 데이터를 데이터베이스로 만들어 넣고, session handler 부분에서 memcached를 호출하게 만들면 될 듯.
- 데이터베이스를 사용하는 안정성 + 세션 공유 문제 해결 + memcached에 의한 성능 향상까지 기대할 수 있지 않을까?
- 이 부분은, 좀더 생각해보면서, 방법을 찾아봐야 할 듯...
<- 곰곰히 생각해보니, 약간 부정적. 세션 데이터는 read보다는 update가 압도적으로 많음. 따라서, 캐시 효과는 작음.
Memcache & MySQL PHP Session Handler PHP code for session db + memcached
http://www.softwareprojects.com/resources/programming/t-php-sessionsave_handler-and-database-sessions-debu-1797.html
http://www.softwareprojects.com/resources/programming/t-memcached-for-php-sessions-1654.html