OpenShift安装Memcached提升Wordpress性能

最近感觉博客的速度又变慢了, 去掉了页面两个iframe之后还是很慢.

用Pingdom测了下速度, 发现主要问题应该不在前端, 而是出在后台的响应速度上, 对于OpenShift来说, 最大的性能瓶颈在于数据库连接, 于是想到了OpenShift提供的500MB大内存和Memcache缓存系统.

首先要ssh登录你的应用, 如果你安装了rhc, 可以直接用这条命令:

rhc app-ssh <app>  

登录之后, 下载libevent和memcached并编译安装(memcached和libevent的下载地址自己上官网找最新的).

cd /tmp  
wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz  
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz  
tar -xzvf memcached-1.4.15.tar.gz  
tar -xzvf libevent-2.0.21-stable.tar.gz  
cd libevent-2.0.21-stable  
./configure --prefix=$HOME/app-root/data/
make  
make install  
cd ../memcached-1.4.15  
./configure --with-libevent=$HOME/app-root/data/ --prefix=$HOME/app-root/data/
make  
make install  

下载编译PHP的memcache, 2.2.7版是我写这篇文章时最新的stable版本, 你可以在http://pecl.php.net/package/memcache里寻找你需要的版本.

cd /tmp  
wget http://pecl.php.net/get/memcache-2.2.7.tgz  
tar -xzvf memcache-2.2.7.tgz  
cd memcache-2.2.7  
phpize  
./configure
make  
cp modules/memcache.so ~/php/  

我们还需要编辑php.ini文件(~/php/configuration/etc/php.ini), 添加一条配置:

extension = /var/lib/openshift/9594a993bf81479095044c02307a338b/php/memcache.so  

其中/var/lib/openshift/9594a993bf81479095044c02307a338b/php/memcache.so是我的memcache.so的路径, 你可以用pwd命令得到完整路径.

保存php.ini, 并重启你的应用.

现在启动memcached(关于这里使用15211而不是默认的11211端口, 是因为OpenShift限制只能使用15000 – 35530的内部端口, 关于memcached的内存、并发等参数请自行调整):

$HOME/app-root/data/bin/memcached -l $OPENSHIFT_INTERNAL_IP -p 15211 -d

如果上面的命令无效请改用下面的命令(感谢小五提供):

$HOME/app-root/data/bin/memcached -l $OPENSHIFT_PHP_IP -p 15211 -d

memcache我们已经安装并启动了, 可是问题仍然没有解决, 因为wordpress还没有用上memcache.

在Wordpress的官网, 有一款名为Memcached Object Cache的插件:http://wordpress.org/plugins/memcached/

这个插件通过Wordpress直接安装是无效的, 需要下载之后把压缩包里面的object-cache.php文件复制到wp-content目录, WordPress会自动调用这个文件.

接着编辑wordpress的wp-config.php文件, 添加如下代码:

global $memcached_servers;  
$memcached_servers = array('default' => array($_ENV['OPENSHIFT_INTERNAL_IP'].':15211'));

现在, WordPress可以利用Memcached进行缓存了.

PS: 经过一周的测试, 单机情况下, 小型Wordpress站点开启Memcached缓存后, 响应速度可能不增反降. 具体以实际测试数据为准, 仅供参考.