WordPress优化启用memcached动态缓存及静态缓存设置教程

WordPress优化启用memcached动态缓存及静态缓存设置教程

前言:

最近一直学习怎么优化wordpress,由于脑子不好用,所以写下来记录一下吧,最近搜索看的这方面文章比较多,大概思路都差不多,想让网站纯静态,但是按照网上的教程试了很多插件,都以失败告终,因为wordpress伪静态,访问量大了,或者别人一CC,就会CPU爆, 从而服务器瘫痪!这个问题,到现在我也没彻底解决呢,我的一个资源站一直被攻击,没停止,主要就是利用了wordpress这个404,对方一直访问我网站不存在的页面,导致大量查询,导致并发查询太高了,导致CPU100%,服务器满负荷,导致网站打不开了!

这个东西,根本防不住,只能把页面改成静态,这样就不会受到影响,目前网站作了如下操作,但是不是静态吧,百度云加速也设置了 ,一会再说百度CDN,先说这个吧,这个也是按照张戈博客文章来的,转载于张戈博客!

内容:

部署memcached(宝塔php里直接安装就行,亲测可以,这步可以忽略)

1、安装memcached

Ps:这里的memcached是指Mencached的服务端,用来处理缓存数据,名字也是容易混淆。

下面2种安装方式任选其一:

①、在线安装

#Centos直接使用yum安装即可,其他系统自行搜索安装命令,比如ubuntu
yum -y install memcached
#启动memcached
service memcached start
#开机启动
chkconfig memcached on

②、编译安装

相比在线安装,很多时候编译安装更加灵活,非常类似Windows平台的自定义安装或绿色安装,推荐熟悉 Linux 系统的朋友使用:

#从官方下载最新源码包
wget http://memcached.org/files/memcached-1.4.25.tar.gz
#解压开始编译安装
tar xzvf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --prefix=/usr/local/memcached
make && make install
cd ..
#设置环境
ln -s /usr/local/memcached/bin/memcached /usr/bin/memcached
cp scripts/memcached.sysv /etc/init.d/memcached
#改为监听127.0.0.1,并关闭UDP连接方式,若为远程服务调用或不需要的话请跳过此行
sed -i 's/OPTIONS=""/OPTIONS="-l 127.0.0.1 -U 0"/g' /etc/init.d/memcached 
 
sed -i 's@chown@#chown@' /etc/init.d/memcached
sed -i 's@/var/run/memcached/memcached.pid@/var/run/memcached.pid@' /etc/init.d/memcached
#启动并设置开机服务
chmod +x /etc/init.d/memcached
service memcached start
chkconfig --add memcached
chkconfig memcached on

至此memcached的服务端就安装好了。

2、集成php-memcached拓展

①、先安装libmemcached

提前分享一个问题,如果直接按照网上的教程安装php-memcached可能会报如下错误:

configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check

大部分教程会使用 –disable-memcached-sasl 参数来禁用这个功能,作为一个强迫症,我还是从国外的论坛扒到了解决方法,很简单,在编译libmemcached之前,先安装cyrus-sasl-devel即可解决

yum install cyrus-sasl-devel

接着开始编译安装libmemcached:

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --with-memcached=/usr/local/memcached --prefix=/usr/local/libmemcached
make && make install
cd ..

②、安装php-memcached组件

下载和解压这步,我们要区分下是php7还是之前的版本:

I、如果当前环境是php7 :

#从github下载PHP7专用的memcached组件分支

wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
#解压备用
unzip php7.zip
cd php-memcached-php7

II、如果是旧的的php版本:

#从官方下载php-memcached的最新源码包
wget http://pecl.php.net/get/memcached-2.2.0.tgz
#解压和编译
tar zxvf memcached-2.2.0.tgz
cd memcached-2.2.0

接下来开始编译:

#注意已有php的实际路径

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

编辑php.ini文件,在最后插入如下参数

extension=memcached.so

其实你发现;;;宝塔面板里,你在Php里安装相应扩展,就可以啦!

Ps:如果不知道php.ini在哪个位置 ? 执行命令:php –ini 即可找到。

保存后,执行如下命令看看是否加载成功

php -m | grep memcached

如果输出memcached则表示成功。

最后,如果是Nginx就 service php-fpm reload ,如果是Apache就重启Apache完成安装。

③、测试缓存

$m->set( 'foo', 100 );
echo $m->get( 'foo' ) . "\n";

将上述代码保存为 test.php,然后执行 php -f test.php,如果能输出100表示安装成功。

三、WordPress缓存

做完上述所有步骤,系统环境就已经支持memcached缓存了。下面分享如何应用到WordPress

1、安装插件

访问github项目页面下载插件包:

https://github.com/tollmanz/wordpress-pecl-memcached-object-cache

下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启memcached缓存。

值得说明的是,这里还有一个大坑等着你来踩:

WordPress官网上的object-cache.php虽然也号称Memcached 插件,然而它只支持Memcache,不支持新版的,所以不能使用。如果错误地将object-cache.php和Memcached混用的话,则会出现WordPress打不开,前台后台页面一片空白的现象。

这也就是经常有站长反馈WordPress启用memcached功能后,页面空白的错误原因了。不巧,张戈在测试的时候也踩坑了,所以特别提出来,希望大家了解错误的原因,规避掉!

2、查看效果

做完第2步之后,你可以去网站前台刷新几次,产生缓存,然后从官方下载探针:

http://pecl.php.net/get/memcache-3.0.8.tgz

解压后,里面有一个memcache.php文件,编辑并找到如下代码:

define('ADMIN_USERNAME','memcache'); // Admin Username
define('ADMIN_PASSWORD','password'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

修改如下:

define('ADMIN_USERNAME','memcache'); // Admin Username 登录名称,自行修改
define('ADMIN_PASSWORD','password'); // Admin Password 登录密码,自行修改
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);
//下面是定义memcached服务器,一般我们是单机部署,所以注释掉一行,并将服务器地址根据实际修改,比如本文是127.0.0.1
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array
//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

上传到网站私密目录(临时测试可以放到根目录),然后通过前台访问memcache.php这个文件,输入上面的用户名和密码即可看到memcached状态:

WordPress启用memcached动态缓存以及报错解决

3、其他设置

如果发现页面可以打开,但是里面没有Hits数据,说明WordPress并没有成功连接到memcached,这时候我们可以在wp-config.php加入如下参数:

global $memcached_servers;
$memcached_servers = array(
array(
'127.0.0.1', // Memcached server IP address
11211 // Memcached server port
)
);

实际的memcached监听IP和端口,你可以通过如下命令查看:

netstat -nutlp | grep memcache

 

四、纯静态缓存

实际上memcached可以缓存动态查询数据,他也可以缓存html内容!因此,memcached也能实现和其他方案一样的html纯净态缓存!

实现原理和我之前分享的php代码缓存html方案类似,不过后者更好的是将缓存内容放在了内存当中,速度比放硬盘快的绝对不是一点点。

如何将前台页面html都缓存到memcached中呢?这里,我们需要用到 batcache 这款插件。

1、下载安装

直接在WordPress后台搜索安装 batcache ,也可以从官方下载插件包:

https://wordpress.org/plugins/batcache/

然后解压得到 advanced-cache.php 上传到wp-content即可。

2、启用缓存

在wp-config.php中启用缓存:

define(‘WP_CACHE’, true);

不过,插件默认只会对游客缓存,显然也是怕影响到前台登录态。缓存和动态判断一直是矛与盾、鱼和熊掌,看个人抉择吧。

3、参数调整

var $max_age = 3600; // Expire batcache items aged this many seconds (zero to disable batcache)
var $remote = 0; // Zero disables sending buffers to remote datacenters (req/sec is never sent)	
var $times = 2; // Only batcache a page after it is accessed this many times... (two or more)	
var $seconds = 0; // ...in this many seconds (zero to ignore this and use batcache immediately)

我目前也只是要用到memcache的动态缓存,所以对于batcache也只是初步了解状态,感兴趣的朋友可以自行搜索学习更多相关设置。max_age代表缓存过期时间(以秒为单位),times表示访问多少次才创建缓存(2是最小值),seconds表示在多少秒之后才创建缓存(0表示立即)。

分享到 :
相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注