说起 WP Super Cache
和 W3 Total Cache
这两个大名鼎鼎的 WordPress 缓存插件,很多博客站长们应该是都很熟悉的吧!明月也是 WP Super Cache
和 W3 Total Cache
插件的老用户了,可以说 N 年前就使用过的,但因为各种因素最后都放弃了,甚至去年都是使用 WP-Rocket
插件来替代的。至于说 WP Super Cache
和 W3 Total Cache
插件当时放弃的原因主要还是“稳定性”太差这个原因的,但是现在回忆细想一下这个“稳定性”其实跟服务器权限是有很大的关系的。
因为 WP Super Cache
和 W3 Total Cache
实在是太强大了,强大到需要服务器的一些具体配置。而以前因为使用的是“虚拟主机”,在一些“权限”上还是有很多限制的,所以就造成运行时间久了以后就会出现各种“不稳定”问题了,记得当时最受不了的就是百度蜘蛛抓取一直返回 503 错误的问题很让我“抓狂”呀。最近正好在 VPS 上针对 WP Super Cache
和 W3 Total Cache
进行了分别的安装和调试,两个插件根据站点流量需求分别用在不同的站点上。
从 WP Super Cache
和 W3 Total Cache
两个插件的原理和性能上来说, WP Super Cache
比较适合日 IP 在 1000 以内的站点使用,因为并发流量过高的情况下使用 WP Super Cache
会造成主机负载压力,并且有时候这个负载压力还是蛮大的,当然如果服务器主机硬件配置高大上,这个负载压力是可以忽略不计的。
而 W3 Total Cache
的缓存性能相对于 WP Super Cache
来说提升很明显,同时对并发流量过高的承受度还是可以接受的,所以配合适合的服务器硬件配置主机还是个很不错的“高性价比” WordPress 缓存方案的,这里所说的服务器硬件配置主要是指 CPU、内存这两个指标的哦。
关于 WP Super Cache
和 W3 Total Cache
插件的具体配置我就不再多说了,因为网上实在是太多类似的文章了(当然大部分都是“千篇一律”的拾人牙慧而已),大家可以随便百度一下了解了,今天主要讲讲 WP Super Cache
和 W3 Total Cache
插件使用服务器端的 memcached
来提升缓存性能。、
关于 memcached
其实说白了,就是 PHP 的一个内存加速器, memcached
会把需要 PHP 运行的代码直接放在服务器内存里来加快运行效率,相应的 WP Super Cache
和 W3 Total Cache
使用 memcached
也就是把一些重要的缓存放到内存里加快了客户端请求的载入时间也就变相的提升了网页的载入速度以及缓存插件的执行效能。
PHP 有 memcached
和 memcache
两个类似组件,百度搜出来的文章,大部分是教你如何安装 memcache(d),却不解释二者的区别。如上图所示在 LNMP 里添加 memcached
模块的时候会提示选择 memcache
还是 memcahed 的。
简单来说:
- memcache 是 pecl 扩展库版本,原生支持 php,出现更早,是老前辈;
- memcached 是 libmemcached 版本,出现较后,是新一代,因此也更加完善,推荐使用。
Ps:如果想更深入了解,可以搜索下 memcache
vs memcached
关于服务器端具体的部署 memcached
我就不多赘述了,在军哥 LNMP 环境下只需要运行 ./addons.sh install memcached
来自动编译安装即可了,很方便的,其他生产环境自行百度吧。
在 WordPress 里要启用 memcached
的支持需要一个 object-cache.php
,上传到 wp-content
目录,这里百度上很多的教程上提供的 object-cache.php
下载链接都是 memcache
的,在 memcached
下使用会出现访问“500 错误”的,所以一定要确认自己是 memcached
还是 memcache
, memcached
的 object-cache.php
可以在 GitHub 获取到如:https://github.com/tollmanz/wordpress-pecl-memcached-object-cache 这里下载上传即可。(这里要感谢【张戈博客』的文章【WordPress 启用 memcached 动态缓存以及报错解决』一文里的分享,让我走了很少的弯路。)
完成上述的服务器端的配置后,就可以在 WP Super Cache
和 W3 Total Cache
插件配置里启用 memcached
的支持了,不过为了让 WordPress 准确的找到 memcached
的 IP 和端口最好还是要在 wp-config.php
里添加上 memcached
的具体信息的,具体放置位置以文件开头为宜,如下:
- global $memcached_servers;
- $memcached_servers = array(
- array(
- 'IP 地址(默认:127.0.0.1)', // Memcached server IP address
- 端口号(默认:11211) // Memcached server port
- )
- );
记得核对好代码里的 IP 地址和端口号与服务器端 memcached
的一定要一直哦。
WP Super Cache 中开启对 memcached
的支持
这里以 WP Super Cache
目前最新版 1.5.3 版本为例(百度里的很多类似教程都无视了版本号差异,真的有很大的差异的), WP Super Cache
的 memcached
支持目前还在“内测”阶段的,所以用“Simple”方式缓存的是无法使用 memcached
的,所以需要切换 WP Super Cache
缓存模式为“Expert”,这样才可以在下面的“高级”里面看到“使用对象缓存系统来存储缓存文件。 (实验室功能)”这个选择项目开关。如下图:
选择这个开关为开启后,点击下面的“更新”,然后清除 WP Super Cache
缓存,这时候在 WP Super Cache
的“内容”里就可以看到 memcached
对象缓存已经生效了所以不显示缓存列表了。如下图:
这是细心的站长们应该发现了 WP Super Cache
提示“Mod rewrite
模块可能未安装!”(如下图所示),这个好像是 WP Super Cache
默认仅支持 Apache
造成的,使用 Nginx
的话一定会看到这个提示的,但是经过明月的测试,发现是没有任何的影响的,基本可以暂时无视,当然网上也有很多这个问题的 rewrite
配置大家可以自行百度参考设置,反正我是没有设置的,目前看运行良好。
W3 Total Cache 中开启对 memcached
的支持
相对于 WP Super Cache
来看 W3 Total Cache
对 memcached
的支持可以说是大幅的提升了,因为在 W3 Total Cache
里 Page cache
、 Minify
、 Database Cache
、 Object Cache
、 Fragment Cache
都可以支持 memcached
。从这点上来说 W3 Total Cache
相对于 WP Super Cache
来说档次提升了不少,我是蛮喜欢的。 W3 Total Cache
里开启 memcached
的支持可以说是很简单了,只要在 General Setings 里上述的模块了选择 memcached
并保存就可以了,在前端输出的 HTML 源码里可以看到如下图:
每种缓存模块结尾都注明了“using memcached”即表示已经成功了。
memcached 探针(实时状态监控)的使用
为了更好的获取 memcached
的运行状态,大家还可以使用 http://pecl.php.net/get/memcache-3.0.8.tgz 里提供的 memcache.php
来实现,安装很简单,只需要将这个 PHP 文件放到一个你知道的目录,然后在浏览器里调用即可,并且此文件还支持账号、密码设定只有你自己可以查看的。
解压后,里面有一个 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
然后输入指向这个文件的网址链接在浏览器里输入账号和密码后就可以看到如下图所示的 memcached
的运行状态了,话说 Hits 命中率还是很高的嘛!
最后一个小提示, memcached
默认内存使用的是 64MB 的,如果你感觉有点儿不够用,在 LNMP 环境下可以修改 /etc/init.d/memcached
文件里的参数来增加内存量的。修改完成记得要重启一下 memcached
哦!
目前,明月两个站点根据情况分别用着 WP Super Cache
和 W3 Total Cache
,至少目前来看还是很稳定的,载入速度也是很满意的,先测试运行几天看看具体的实测效果,当然在开启了静态化缓存后,必不可少的 CDN 也是要有的,至于为啥还要用 CDN ,老站长们都懂的,谁让我们活在一个“黑暗森林法则”的互联网世界里呢。
站点效果体验:
- 本文主要参考文章:【WordPress 启用 memcached 动态缓存以及报错解决』
历史文章推荐:
- 2019: 入驻了自媒体平台,企业还需要有自己的官网吗?(8)
- 2018: 【阅读分享】网站的内页如何让百度秒收录(14)
- 2013: 南怀瑾 :给心情做个深呼吸(0)
- 2012: 《魔兽世界:熊猫人之谜》开场CG动画真给力呀!(0)
- 本博客公众号
- 扫一扫关注!
-
- 本博客小程序
- 微信内浏览本博客
-
2018-12-06 14:47 18F
学习到了,到时优化一下
2018-12-06 14:59 B1
@ 沃茨博客 现在缓存插件其实意义已经不大了,特别是CDN技术的日趋成熟和廉价!最好的加速优化也不如来个CDN更直接有效!
2018-11-11 00:50 17F
谢谢,蛮有用的,明天研究一下W3
2018-11-11 01:01 B1
@ 翁志辉 其实,如果有了CDN的话,缓存插件很鸡肋的!
2018-12-05 04:13 B1
@ 翁志辉 前前后后好些看,第一个就是 wpsupercache,后来换了 w3,又换了rocket,现在又回到第一个,感觉只有适合的,米得最完善的,偶现在开启了 opcache wincache redis,所以前台不用缓存插件,速度也非常稳定。用个插件则更快了。真正要快还得查询上做工作。
2018-12-05 07:16 B2
@ webkv 数据库其实才是瓶颈的!
2018-12-05 08:26 B2
@ webkv 其实我现在倒是认为缓存插件的作用就是“临时救急”的,并不建议平时一直都使用!
2018-05-27 01:58 16F
请教下博主:WP Super Cache配合memcached(正常)。WP Super Cache缓存文件夹里是空的,只有一个空的网址文件夹。而且WP Super Cache页面里的缓存时间刷新一次就变一次(最新当前时间),不知道是否正常。。。
2018-05-27 02:02 B1
@ 胡一刀 只要你的站点可以正常访问到就是正常的!不过,不建议你使用缓存插件,因为插件仅仅是救急用的,不是必须要用的!
2018-05-27 05:38 B2
@ 明月登楼 正常访问肯定没问题。关键是我不知道wsc起作用没,缓存时间看源码都是即时的,不知这样是不是正常
2018-05-27 15:25 B3
@ 胡一刀 这个你可以通过浏览器的开发者工具来调试查看header头部信息来判定是否缓存生效或者起作用了!自行百度了解吧!
2018-05-27 15:29 B4
@ 明月登楼 缓存是生效的,关键问题是,我不知道它俩谁缓存的 – -!
看到百度贴吧有人在问同样问题。。。。
2018-05-27 15:32 B4
@ 胡一刀 缓存插件只负责静态网页内容的缓存,mem负责数据库查询的缓存!网页缓存通过浏览器查看,数据库缓存通过服务器端mem命令行查询!
2017-11-19 12:41 15F
明哥,为什么 Memcached 我绑定了内网IP以及修改了端口,其他的也做好了相应的修改,但自定义的端口的状态老是显示“未使用”呢(如果使用默认的就一切正常)?万望指点一二,不甚感谢!
2017-11-19 15:54 B1
@ 我爱动感单车网 自定义的端口未使用?你确定你的memcached运行时指定这个端口了?还有memcached在安装后会自动运行的,你看看是不是重复运行了?要把重复运行的进程关掉才能正常的!
2017-11-20 12:33 B2
@ 明月登楼 问题找到了,就是无法使用内网IP,否则就出问题。
2017-11-20 12:55 B3
@ 我爱动感单车网 哦,那就是你内容的权限没有开启,需要在防火墙里开启内网IP的访问的!
2017-11-20 12:58 B3
@ 我爱动感单车网 你可以试试在防火墙里添加仅限内网IP访问 Memcached 的端口号,如在iptables里就是如下指令:
iptables -A INPUT -s 内网IP/32 -p tcp -m tcp --dport 端口号 -j ACCEPT
2017-11-16 16:03 14F
按照明哥你讲解的方法一步步进行了安装,但是在WP Super Cache里并没有看到有“实验室功能”,怎么回事?
急盼回复,谢谢!
2017-11-16 16:05 B1
@ 我爱动感单车网 你最好是加我QQ1974718430,截图看看!不是没有,只是可能是英文的,或者是版本升级了,位置变了等!
2017-11-16 16:14 B1
@ 我爱动感单车网 [需要切换 WP Super Cache 缓存模式为“Expert”,这样才可以在下面的“高级”里面看到“使用对象缓存系统来存储缓存文件。 (实验室功能)”这个选择项目开关],你确定你的模式为expert了吗?

2017-09-08 14:25 13F
WP Super Cache 、WP-Rocket和W3 Total Cache这3个插件会影响评论吧?
2017-09-08 14:27 B1
@ 缙哥哥 不会,影响评论的一般都是CDN造成的,插件是不可能的!
2017-09-06 01:00 12F
其实wp super cache 缓存之后的效果还是很好的,但是就是兼容性不是很好,而且功能性也比较单一,相比其它的缓存插件,他更专一,但是有些人可能喜欢功能强大吧
2017-09-06 08:23 B1
@ BanYuner WP Super Cache 确实兼容性差一些,相对于简单的话, WP-Rocket 略胜一筹,专业的话非 W3 Total Cache 莫属了,但是这三个使用的时候要根据具体的流量情况来区别对待的,前两位比较适合流量小的时候, W3 Total Cache 适合流量大的时候,要是用的不对会对服务器负载造成很大的压力的!
2017-09-06 09:54 B2
@ 明月登楼 W3 Total Cache要是会用的话,别人说是神器,默认配置都很好了
2017-09-06 10:25 B3
@ BanYuner W3 Total Cache 其实最复杂的是需要服务器端的Web服务器和PHP模块的支持才可以发挥出效果来!只有这样结合的 W3 Total Cache 才能近乎完美的面对网站高并发的http请求的。所以 W3 Total Cache 不适合小网站用,因为会拖慢小网站主机的性能的!日IP3000以上用 W3 Total Cache 效果很明显的!
2017-08-22 11:45 11F
公司网站没用开源的系统,个人网站倒是一直再用WP Super Cache,个人感觉没太大效果,可能是我还不会设置吧?
2017-08-22 12:31 B1
@ JIE WP Super Cache 插件其实需要一些服务器设置的配合的!效果我个人感觉还是很明显的!