天天看点

centos5.2用memcache 来作PHP 的session.save_handler

最近我的网站访问在直线上升,因为动态会员游戏网站,一直在想办法做些优化,今天想到如果把php的session放在内存,可能会提升网站的访问速度。于是开始搜索资料。经过一天的摸索,终于搞定。问题主要出在php有两个memcache模块,一个是php-memcache,一个是php-memcached,php-memcached是最新的,也是比较稳定的,网上的资料都是关于php-memcache的,而没有提到php-memcached,而php-memcached的配置跟php-memcache是有所不同的。大致的整个安装过程:

1、安装libevent  1.4.10

wget http://monkey.org/~provos/libevent-1.4.10-stable.tar.gz

tar xzvf libevent-1.4.9-stable.tar.gz

cd libevent-1.4.10-stable

./configure --prefix=/usr

make && make install

2、安装memcached1.2.8

wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

tar -zxvf  memcached-1.2.8.tar.gz

cd memcached-1.2.8

./configure --with-libevent=/usr

make && make install

3、安装zlib

wget http://www.zlib.net/zlib-1.2.3.tar.gz

tar -zxvf zlib-1.2.3.tar.gz

cd zlib-1.2.3

./configure --prefix=/usr --shared

make && make install

4、安装libmemcached

wget http://download.tangent.org/libmemcached-0.26.tar.gz

tar zxvf libmemcached-0.26.tar.gz

cd libmemcached-0.26

./configure --prefix=/usr/local/libmemcached/

make && make install

5、安装php-memcached模块

wget http://pecl.php.net/get/memcached

tar -zxvf  memcached-0.1.5.tgz

cd  memcached-0.1.5

phpize

./configure --with-php-config=/usr/bin/php-config --enable-memcache --with-libmemcached-dir=/usr/local/libmemcached

make && make install

6、启动memcached

/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d

执行后,可以用以下办法查看执行状态

telnet 127.0.0.1 11211

stats

STAT pid 11568

STAT uptime 5910

STAT time 1241876672

STAT version 1.2.8

STAT pointer_size 32

STAT rusage_user 0.751885

STAT rusage_system 1.584759

STAT curr_items 2615

STAT total_items 36753

STAT bytes 244835

STAT curr_connections 3

STAT total_connections 18427

STAT connection_structures 36

STAT cmd_flush 0

STAT cmd_get 18388

STAT cmd_set 38334

STAT get_hits 15717

STAT get_misses 2671

STAT evictions 0

STAT bytes_read 4924864

STAT bytes_written 1992526

STAT limit_maxbytes 134217728

STAT threads 2

STAT accepting_conns 1

STAT listen_disabled_num 0

END

有以上信息出现,表明启动成功!

7、加入开机启动

nano /etc/rc.d/local.d

加一行

/usr/local/bin/memcached -p 11211 -l 127.0.0.1 -d

8、编辑php.ini

nano /etc/php.ini

在文件最后加入:

extension = "memcached.so"

修改

session.save_handler = files  -> session.save_handler = memcached

session.save_path = "/var/lib/php/session" -> session.save_path = "127.0.0.1:11211"

9、重启apache

service httpd restart

大功告成!

需要注意的地方主要有2点,

1、安装libmemcached需用到zlib,我机器没有这个,花了很多时间找编译libmemcached时出错的原因。

2、php.ini文件的配置,php-memcached模块跟php-memcache不同,要设成是memcached,这个在phpinfo页面的Registered save handlers可以看到。如果设置不正确,会有"Cannot find save handler memcache"的错误提示。

3、session.save_path几乎所有的资料都是session.save_path = "tcp://127.0.0.1:11211",但这可能在memcaceh是这样用的,我没有验证,我一开始也是这样设置,但一直出现"Failed to write session data (memcached)"的错误,找了很入也没找到是什么原因,后来在php.net上找到

session.save_path string

Defines a comma separated of hostname:port entries to use for session server pool, for example "sess1:11211, sess2:11211".
这段说明,于是去掉tcp://再试,才终于成功!

最后:因为网站一直在运行的,建议不要直接动php.ini,

直接用一个php文件来测试

<?

ini_set("session.save_handler","memcached");

ini_set("session.save_path","127.0.0.1:11211");

session_start();

if (!isset($_SESSION['TEST'])) {

 $_SESSION['TEST'] = time();

}

$_SESSION['TEST3'] = time();

print $_SESSION['TEST'];

print "<br><br>";

print $_SESSION['TEST3'];

print "<br><br>";

print session_id();

?>

只要这个文件没有出现错误提示了,就可以直接修改php.ini相应的内容,然后重启apache,就样就不影响会员访问网站。