操作系统:ubuntu 7.10
web1 : apache2.24 IP:192.168.1.105
web2: apache2.24 IP:192.168.1.106
php : PHP 5.2.3
软件 php5-memcache memcache
web1 安装
今天想到以前用 nfs 挂载磁盘的笨办法来解决 php session问题,效果是可以但是严重的影响了访问平台速度,今天看php官方网站无意中发现memcache,大侠不要笑我,因为,以前也没太注意此问题,好了下面开始操作。
1。安装memcached,ubuntu懒人方式当然首选 apt-get。apache php5 安装我就不多说了。
apt-get install memcached php5-memcache
将etc/memcached.conf 中的 127.0.0.1 改成 服务器地址我这里是 192.168.1.105.可以给memcache 单建一个用户去跑服务,默认是nobody,我就不去建了。
将/etc/php5/apache2/conf.d/memcache.ini 里的 extension=memcache.so 前注释去掉。然后重启动apache2 查看 phpinfo 中的 "Registered save handlers" 会有 "files user memcache" 这3个可用。
2。然后修改 /etc/php5/apache2/php.ini
session.save_handler = memcache
session.save_path = "tcp://192.168.1.105:11211"
session.save_path = "tcp://192.168.1.105:11211"
使用多个 memcached server 时用逗号","隔开
也可以在 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path "tcp://192.168.1.105:11211"
php_value session.save_path "tcp://192.168.1.105:11211"
再或者在某个一个应用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://192.168.1.105:11211");
3.启动memcached
/etc/init.d/memcached start
4. 在程序中使用 memcache 来作 session 存储,用例子测试一下:
<?php
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();
?>
用 sessionid 去 memcached 里查询一下:
<?php会有看到
$memcache = memcache_connect('192.168.1.105', 11211);
var_dump($memcache->get('27f535433865c7e250d2d1062322edfd'));
?>
string(37) "TEST|i:1219222593;TEST3|i:1219222611;"
这样的输出,证明session正常工作了。
apt-get install php5-memcache
然后修改/etc/php5/apache2/conf.d/memcache.ini
将extension=memcache.so 前注释去掉。
然后修改/etc/php5/apache2/php.ini
session.save_handler = memcache
session.save_path = "tcp://192.168.1.105:11211"
session.save_path = "tcp://192.168.1.105:11211"
同样可以用上面的例子做测试.
总结
用 memcache 来存储 session 在读写速度上会比 files 时快很多,
而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置
成使用同一组 memcached 服务器就可以,减少了额外的工作量。
缺点是 session 数据都保存在 memory 中,持久化方面有所欠缺,
但对 session 数据来说也不是很大的问题.
本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/93887,如需转载请自行联系原作者