Last active
August 29, 2015 13:55
-
-
Save JingwenTian/8753734 to your computer and use it in GitHub Desktop.
用xcache和memcache做php加速
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
xcache 是中国人自己写的php加速器.据各种评测资料,xcache是个相当不错的php加速器了: | |
现在eAccelerator 半死不活的样子,PHPA则需要专利授权,而 APC 又 bug 一大堆,基本上需要完全重写。现在,唯一象样的 PHP 编译/加速器就属 Xcache 了. | |
它稳定、快速、具有很强的可移植性,并且是开放源代码的,还可以缓存对象。 | |
于是打算试试看,freebsd下最方便的软件安装方式就是ports了. | |
在/usr/ports/www下没有找到xcache.于是.单独升级www ports树. | |
caicai# cvsup -L 2 -h cvsup.cn.FreeBSD.org /usr/share/examples/cvsup/ports-supfile | |
caicai# cd /usr/ports/www/xcache/ | |
caicai# make install clean | |
拷贝xcache的配置文件到php配置文件目录.重启apache. | |
caicai# cp /usr/local/share/examples/xcache/xcache.ini /usr/local/etc/php | |
caicai# apachectl restart | |
apache启动的时候会自动检测 /usr/local/etc/php 下面的ini文件并自动加载. | |
看一下phpinfo(); | |
Scan this dir for additional .ini files /usr/local/etc/php | |
additional .ini files parsed /usr/local/etc/php/extensions.ini, /usr/local/etc/php/xcache.ini | |
Xcache自动加载成功. | |
===================================================== | |
使用memchche代替php默认的file来存储session,能够实现更快的速度,而且很容易实现多主机共享session的需求。本文简要介绍一下安装设置的办法 | |
系统环境:FreeBSD7.0 , php5.2.0 | |
1.首先安装memcache,因为是在FreeBSD环境下,所以我们采用最简单的ports方式来安装memcache | |
cd /usr/ports/databases/memcached/ | |
make install clean | |
ports会自动寻找源进行下载,然后编译安装 | |
安装好memcache以后,编辑/etc/rc.conf文件,在最后一行加一句 memcached_enable="YES" | |
然后保存退出。memcache会随着开机自动启动,手动启动的命令是: | |
/usr/local/etc/rc.d/memcached start | |
好了,现在memcache已经安装并启动完毕了。 | |
2.安装pecl::memcache扩展,这是php的扩展,安装以后可以使用Memcache函数库,php手册上有详细的使用法说明。 | |
cd /usr/ports/databases/pecl-memcache/ | |
make install clean | |
安装好以后,会自动在/usr/local/etc/php/extension.ini 加上一行 extension=memcache.so | |
用命令查看一下: | |
cat /usr/local/etc/php/extensions.ini | |
如果看见最后一行有 extension=memcache.so | |
说明已经安装好了,这个时候重新启动一下apache server即可,phpinfo()可以看到memcache扩展的信息。 | |
3.设置session用memcache来存储 | |
编辑php.ini文件,做如下修改 | |
session.save_handler = memcache | |
session.save_path = "tcp://127.0.0.1:11211" | |
当然,也可以在httpd.conf文件中加上,前提是php以模块方式载入,如果是cgi方式无效 | |
php_value session.save_handler "memcache" | |
php_value session.save_path "tcp://127.0.0.1:11211" | |
3. 修改配置文件,在 php.ini 中全局设置: | |
session.save_handler = memcache | |
session.save_path = "tcp://127.0.0.1:11211" | |
或者某个目录下的 .htaccess : | |
php_value session.save_handler "memcache" | |
php_value session.save_path "tcp://127.0.0.1:11211" | |
再或者在某个一个应用中: | |
ini_set("session.save_handler", "memcache"); | |
ini_set("session.save_path", "tcp://127.0.0.1:11211"); | |
使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。 | |
4. 启动 memcached: | |
memcached -d -l 127.0.0.1 -p 11212 -m 128 | |
或 启动Memcache的服务器端: | |
memcached -d -m 100 -u root -l 192.168.36.200 -p 11211 -c 256 -P /tmp/memcached.pid | |
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid | |
-d选项是启动一个守护进程, | |
-m是分配给Memcache使用的内存数量,单位是MB,我这里是100MB, | |
-u是运行Memcache的用户,我这里是root, | |
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.36.200, | |
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,我们这里统一使用11211 | |
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定。 | |
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid, | |
5. 在程序中使用 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(); | |
?> | |
6. 用 sessionid 去 memcached 里查询一下: | |
<?php | |
$memcache = memcache_connect('localhost', 11211); | |
var_dump($memcache->get('19216821213c65cedec65b0883238c278eeb573e077')); | |
$memcache->set('aaaa', 'hello everyone'); | |
var_dump($memcache->get('aaaa')); | |
?> | |
会有看到 | |
string(37) "TEST|i:1177556731;TEST3|i:1177556881;" | |
这样的输出,证明 session 正常工作。 | |
用 memcache 来存储 session 在读写速度上 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment