20161105152331

一般没有做优化的情况下,页面第一个文件的waiting(FFTB)的时间太长,也就是网页需要等到好久才能显示内容,这种情况很多很多站长都遇到过,对于wordpress来说,通常都是上插件,WP Super Cache、W3 Total Cache等这类插件确实能带来一些效果,但是缓存又带来了很多问题,让人越来越头疼,今天在运维笔记上看到一篇文章,是利用Redis来缓存wordpress的执行代码,提高请求速度,我亲自试了下,确实有很好的效果,这里分享给大家。

什么是Redis缓存?

wordpress-redis

Redis是一个高级的key-value存储系统,类似memcached,所有内容都存在内存中,因此每秒钟可以超过10万次GET操作。

下面提出的解决方案是在Redis中缓存所有输出的HTML 内容而无需再让WordPress重复执行页面脚本。这里使用Redis代替Varnish设置简单,而且可能更快。

和memcache一样redis也分客户端(php插件)和服务端。
安装Redis服务端可以参考:blog.linuxeye.com/308.html
安装Redis php客户端:

cd/root/lnmp/src
wget http
://pecl.php.net/get/redis-2.2.3.tgztar xzf redis-2.2.3.tgzcd redis-2.2.3 /usr/local/php/bin/phpize./configure--with-php-config=/usr/local/php/bin/php-config
make
&&make install
sed
-i's@^extension_dir\(.*\)@extension_dir\1\nextension = "redis.so"@' /usr/local/php/etc/php.ini
service php
-fpm restart

如果你用的是OneinStack的那个lnmp一键安装包,且已经安装了Redis的话 可以直接进行下面的操作。

使wordpress支持Redis

注意:请关闭所有其他缓存插件,原作者改进了插件,以前的翻译的文章不适用。

你需要一个客户端开发包以便PHP可以连接到redis服务端

这里我们推荐predis. 加入WordPress的根目录(cd命令定位到wordpress的根目录),执行下面的代码来获取predis并修改所有者为WWW

wget http://uploads.staticjw.com/ji/jim/predis.phpchown www.www./predis.php

前端缓存的PHP脚本,加入WordPress的根目录(cd命令定位到wordpress的根目录),执行下面的代码来获取前端缓存PHP脚本并修改所有者为WWW

wget https://gist.githubusercontent.com/JimWestergren/3053250/raw/d9e279e31cbee4a1520f59108a4418ae396b2dde/index-with-redis.phpchown www.www./index-with-redis.php

根据自己需求修改index-with-redis.php,修改如下:

$cf= 0;                        // 如果使用了cloudflare加速的话需要设置为1(cloudflare是一个CDN)$debug= 1;                     // 如果设置为1,则在页面底部添加debug信息(页面执行时间),设置为0则不显示$display_powered_by_redis= 0;  // 显示powered_by信息,1为显示,0为不显示

替换index.php(下面的命令是先备份index.php为index.php_bk,然后重命名index-with-redis.php为index.php)

mv index.php index.php_bk#替换到原来的index.php,也可以改nginx伪静态规则mv index-with-redis.php index.php

PS:我用的是Nginx,所以直接替换文件名就可以了,如果你用的是Apache,还需要把.htaccess中出现的index.php替换成index-with-redis.php,如下图

apache-htaccess

缓存问题在index-with-redis.php中有注释

Appendinga?c=y to a url deletes the entire cache of the domain,only workswhenyou are loggedin
Appendinga?r=y to a url deletes the cache of that urlSubmittinga comment deletes the cache of that pageRefreshing (f5)a page deletes the cache of that page

翻译过来就是:

  • 管理员登录后,在网站url后面加上?c=y即可刷新整个网站
  • 可以在网站页面后面加上?r=y可手动刷新页面
  • 提交评论会自动刷新页面
  • 刷新(f5)页面也可以刷新页面

不知道?c=y加哪儿?比如我的网址是www.liubiji.com,那么增加?c=y之后就是www.liubiji.com/?c=y  打开这个网址,就可以刷新整站缓存(前提是先登录哦)

关于更新文章时自动刷新首页缓存:

在你的Wordpress的Function.php中加入以下代码(出自:https://blog.zts1993.com/4738.html):

// 更新文章时自动刷新首页缓存 redis
functionnewPostRefresh() {$temp=file_get_contents("http://www.liubiji.com/?r=y");//网址换成自己的
}add_action('publish_post', 'newPostRefresh');add_action('edit_post', 'newPostRefresh');add_action('delete_post', 'newPostRefresh');add_action('comment_post', 'newPostRefresh');add_action('edit_comment', 'newPostRefresh');add_action('delete_comment', 'newPostRefresh');add_action('wp_set_comment_status', 'newPostRefresh');add_action('switch_theme', 'newPostRefresh');
自动更新Wordpress缓存

在crontab中配置每10分钟用curl访问首页更新缓存,每天凌晨对首页或者分类页面进行更新。

*/10 * * * * curl http://www.liubiji.com/?r=y1 1 * * *curl http://www.liubiji.com/category/code/wordpress/?r=y

Redis缓存加速wordpress的效果

2016-11-05_142057

配置好之后,页面的底部会有debug的页面执行时间戳,如下:

2016-11-05_153959

使用 Redis 的情况下,平均页面执行时间 0.004XX 秒

不想要的话可以把debug设置为0,这样页面底部就干净啦!

PS:

  • WordPress Redis缓存建议PHP版本在5.3以上;
  • WordPress Redis缓存加速效果无疑是明显的,特别页面多访问大的网站博客,在使用Wordpress Redis缓存加速时请禁止其它的所有缓存插件,以免造成不必要的冲突。
  • 本博采用PHP7+MySQL5.7+Nginx+Redis;未安装任何wordpress缓存插件。

赶紧整理一下,享受Redis带来的飞一般的效果吧!

 

via.http://www.liubiji.com/1583.html

最后修改:2017 年 05 月 22 日 03 : 35 PM