一般没有做优化的情况下,页面第一个文件的waiting(FFTB)的时间太长,也就是网页需要等到好久才能显示内容,这种情况很多很多站长都遇到过,对于wordpress来说,通常都是上插件,WP Super Cache、W3 Total Cache等这类插件确实能带来一些效果,但是缓存又带来了很多问题,让人越来越头疼,今天在运维笔记上看到一篇文章,是利用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,如下图
缓存问题在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的效果
配置好之后,页面的底部会有debug的页面执行时间戳,如下:
使用 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