Skip to content

Instantly share code, notes, and snippets.

@JingwenTian
Last active August 29, 2015 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JingwenTian/8753734 to your computer and use it in GitHub Desktop.
Save JingwenTian/8753734 to your computer and use it in GitHub Desktop.
用xcache和memcache做php加速
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