操作系统: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");
- 1.
- 2.
3.启动memcached
- 1.
/etc/init.d/memcached start
- 1.
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();
?>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 1.
用 sessionid 去 memcached 里查询一下:会有看到<?php
$memcache = memcache_connect('192.168.1.105', 11211);
var_dump($memcache->get('27f535433865c7e250d2d1062322edfd'));
?>
- 1.
- 2.
- 3.
- 4.
string(37) "TEST|i:1219222593;TEST3|i:1219222611;"
- 1.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
这样的输出,证明session正常工作了。
- 1.
- 1.
web2 安装
- 1.
apt-get install php5-memcache
- 1.
然后修改/etc/php5/apache2/conf.d/memcache.ini
- 1.
将extension=memcache.so 前注释去掉。
- 1.
然后修改/etc/php5/apache2/php.inisession.save_handler = memcache
session.save_path = "tcp://192.168.1.105:11211"
- 1.
- 2.
- 3.
同样可以用上面的例子做测试.
- 1.
- 1.
总结
- 1.
用 memcache 来存储 session 在读写速度上会比 files 时快很多,
- 1.
而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置
- 1.
成使用同一组 memcached 服务器就可以,减少了额外的工作量。
- 1.
缺点是 session 数据都保存在 memory 中,持久化方面有所欠缺,
- 1.
但对 session 数据来说也不是很大的问题.
- 1.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.