WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

2017-08-1919:01:22 52 10,993 5155字阅读17分11秒
摘要

目前,明月两个站点根据情况分别用着 WP Super Cache 和 W3 Total Cache ,至少目前来看还是很稳定的,载入速度也是很满意的,先测试运行几天看看具体的实测效果,当然在开启了静态化缓存后,必不可少的 CDN 也是要有的,至于为啥还要用 CDN ,老站长们都懂的,谁让我们活在一个“黑暗森林法则”的互联网世界里呢。

说起 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 来提升缓存性能。、

WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

memcached 是什么?

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。其守护进程(daemon )是用 C 写的,但是客户端可以用任何语言来编写,并通过 memcached 协议与守护进程通信。

主要特征

  • memcached 作为高速运行的分布式缓存服务器,具有以下的特点。
  • 协议简单
  • 基于 libevent 的事件处理
  • 内置内存存储方式
  • memcached 不互相通信的分布式

关于 memcached 其实说白了,就是 PHP 的一个内存加速器, memcached 会把需要 PHP 运行的代码直接放在服务器内存里来加快运行效率,相应的 WP Super Cache W3 Total Cache 使用 memcached 也就是把一些重要的缓存放到内存里加快了客户端请求的载入时间也就变相的提升了网页的载入速度以及缓存插件的执行效能。

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 的具体信息的,具体放置位置以文件开头为宜,如下:

  1. global $memcached_servers;
  2. $memcached_servers = array(
  3.     array(
  4.         'IP 地址(默认:127.0.0.1)', // Memcached server IP address
  5.          端口号(默认:11211)        // Memcached server port
  6.     )
  7. );

记得核对好代码里的 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 和 W3 Total Cache 缓存插件使用 memcached 提升性能

选择这个开关为开启后,点击下面的“更新”,然后清除 WP Super Cache 缓存,这时候在 WP Super Cache 的“内容”里就可以看到 memcached 对象缓存已经生效了所以不显示缓存列表了。如下图:

WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

这是细心的站长们应该发现了 WP Super Cache 提示“Mod rewrite 模块可能未安装!”(如下图所示),这个好像是 WP Super Cache 默认仅支持 Apache 造成的,使用 Nginx 的话一定会看到这个提示的,但是经过明月的测试,发现是没有任何的影响的,基本可以暂时无视,当然网上也有很多这个问题的 rewrite 配置大家可以自行百度参考设置,反正我是没有设置的,目前看运行良好。

WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

2017.08.20 更新

可以通过在 function.php 里添加下面的代码来屏蔽 WP Super Cache 里这个提示的:

  1. //禁止 WP Super Cache 显示“Mod rewrite 模块可能未安装!”
  2. add_filter('got_rewrite', 'nginx_has_rewrites');
  3. function nginx_has_rewrites() {
  4. return true;
  5. }

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 源码里可以看到如下图:

WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

每种缓存模块结尾都注明了“using memcached”即表示已经成功了。

memcached 探针(实时状态监控)的使用

为了更好的获取 memcached 的运行状态,大家还可以使用 http://pecl.php.net/get/memcache-3.0.8.tgz 里提供的 memcache.php 来实现,安装很简单,只需要将这个 PHP 文件放到一个你知道的目录,然后在浏览器里调用即可,并且此文件还支持账号、密码设定只有你自己可以查看的。

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

  1. define('ADMIN_USERNAME','memcache');    // Admin Username
  2. define('ADMIN_PASSWORD','password');    // Admin Password
  3. define('DATE_FORMAT','Y/m/d H:i:s');
  4. define('GRAPH_SIZE',200);
  5. define('MAX_ITEM_DUMP',50);
  6. $MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
  7. $MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

修改如下:

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

然后输入指向这个文件的网址链接在浏览器里输入账号和密码后就可以看到如下图所示的 memcached 的运行状态了,话说 Hits 命中率还是很高的嘛!

WP Super Cache 和 W3 Total Cache 缓存插件使用 memcached 提升性能

最后一个小提示, memcached 默认内存使用的是 64MB 的,如果你感觉有点儿不够用,在 LNMP 环境下可以修改 /etc/init.d/memcached 文件里的参数来增加内存量的。修改完成记得要重启一下 memcached 哦!

目前,明月两个站点根据情况分别用着 WP Super Cache W3 Total Cache ,至少目前来看还是很稳定的,载入速度也是很满意的,先测试运行几天看看具体的实测效果,当然在开启了静态化缓存后,必不可少的 CDN 也是要有的,至于为啥还要用 CDN ,老站长们都懂的,谁让我们活在一个“黑暗森林法则”的互联网世界里呢。

2017.08.20 更新追加:

在服务器端部署 Memcached 的时候一定要针对一个站点运行一个 Memcached 进程,如果有绑定的内网 IP 就用内网 IP 作为 Memcached 的 IP 来使用(使用 127.0.0.1 还是有一些安全隐患的),这样安全性上提升很大,甚至可以限定只有主机 IP 才可以访问 Memcached 的端口这样最好。理论上 Redis 也可以这样来使用的,有空了再试试 W3 Total Cache +  Redis 的组合,可惜 WP Super Cache 好像不支持 Redis ,好尴尬呀!

站点效果体验:

【玉满斋』使用的是 W3 Total Cache

【旗舰店』使用的是 WP Super Cache

本文最后更新于2019年7月6日,已超过 1 年没有更新,如果文章内容或图片资源链接失效和错位的,请留言反馈,我们会及时处理,谢谢!

历史文章推荐:

  • 本博客公众号
  • 扫一扫关注!
  • weinxin
  • 本博客小程序
  • 微信内浏览本博客
  • weinxin
明月登楼
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:52   其中:访客  0   博主  0
    • 沃茨博客 沃茨博客 1

      学习到了,到时优化一下 :mrgreen:

        • 明月登楼 明月登楼

          @ 沃茨博客 现在缓存插件其实意义已经不大了,特别是CDN技术的日趋成熟和廉价!最好的加速优化也不如来个CDN更直接有效!

        • 翁志辉 翁志辉 2

          谢谢,蛮有用的,明天研究一下W3

            • 明月登楼 明月登楼

              @ 翁志辉 其实,如果有了CDN的话,缓存插件很鸡肋的!

              • webkv webkv 2

                @ 翁志辉 前前后后好些看,第一个就是 wpsupercache,后来换了 w3,又换了rocket,现在又回到第一个,感觉只有适合的,米得最完善的,偶现在开启了 opcache wincache redis,所以前台不用缓存插件,速度也非常稳定。用个插件则更快了。真正要快还得查询上做工作。

                  • 明月登楼 明月登楼

                    @ webkv 数据库其实才是瓶颈的!

                    • 明月登楼 明月登楼

                      @ webkv 其实我现在倒是认为缓存插件的作用就是“临时救急”的,并不建议平时一直都使用!

                  • 胡一刀 胡一刀 1

                    请教下博主:WP Super Cache配合memcached(正常)。WP Super Cache缓存文件夹里是空的,只有一个空的网址文件夹。而且WP Super Cache页面里的缓存时间刷新一次就变一次(最新当前时间),不知道是否正常。。。

                      • 明月登楼 明月登楼

                        @ 胡一刀 只要你的站点可以正常访问到就是正常的!不过,不建议你使用缓存插件,因为插件仅仅是救急用的,不是必须要用的!

                          • 胡一刀 胡一刀 1

                            @ 明月登楼 正常访问肯定没问题。关键是我不知道wsc起作用没,缓存时间看源码都是即时的,不知这样是不是正常

                              • 明月登楼 明月登楼

                                @ 胡一刀 这个你可以通过浏览器的开发者工具来调试查看header头部信息来判定是否缓存生效或者起作用了!自行百度了解吧!

                                  • 胡一刀 胡一刀 1

                                    @ 明月登楼 缓存是生效的,关键问题是,我不知道它俩谁缓存的 – -! :lol: 看到百度贴吧有人在问同样问题。。。。

                                    • 明月登楼 明月登楼

                                      @ 胡一刀 缓存插件只负责静态网页内容的缓存,mem负责数据库查询的缓存!网页缓存通过浏览器查看,数据库缓存通过服务器端mem命令行查询!

                              • 我爱动感单车网 我爱动感单车网 5

                                明哥,为什么 Memcached 我绑定了内网IP以及修改了端口,其他的也做好了相应的修改,但自定义的端口的状态老是显示“未使用”呢(如果使用默认的就一切正常)?万望指点一二,不甚感谢!

                                  • 明月登楼 明月登楼

                                    @ 我爱动感单车网 自定义的端口未使用?你确定你的memcached运行时指定这个端口了?还有memcached在安装后会自动运行的,你看看是不是重复运行了?要把重复运行的进程关掉才能正常的!

                                  • 我爱动感单车网 我爱动感单车网 5

                                    按照明哥你讲解的方法一步步进行了安装,但是在WP Super Cache里并没有看到有“实验室功能”,怎么回事? :cry: 急盼回复,谢谢!

                                      • 明月登楼 明月登楼

                                        @ 我爱动感单车网 你最好是加我QQ1974718430,截图看看!不是没有,只是可能是英文的,或者是版本升级了,位置变了等!

                                        • 明月登楼 明月登楼

                                          @ 我爱动感单车网 [需要切换 WP Super Cache 缓存模式为“Expert”,这样才可以在下面的“高级”里面看到“使用对象缓存系统来存储缓存文件。 (实验室功能)”这个选择项目开关],你确定你的模式为expert了吗? :sad: :?:

                                        • 缙哥哥 缙哥哥 5

                                          WP Super Cache 、WP-Rocket和W3 Total Cache这3个插件会影响评论吧?

                                          • BanYuner BanYuner 4

                                            其实wp super cache 缓存之后的效果还是很好的,但是就是兼容性不是很好,而且功能性也比较单一,相比其它的缓存插件,他更专一,但是有些人可能喜欢功能强大吧

                                              • 明月登楼 明月登楼

                                                @ BanYuner WP Super Cache 确实兼容性差一些,相对于简单的话, WP-Rocket 略胜一筹,专业的话非 W3 Total Cache 莫属了,但是这三个使用的时候要根据具体的流量情况来区别对待的,前两位比较适合流量小的时候, W3 Total Cache 适合流量大的时候,要是用的不对会对服务器负载造成很大的压力的!

                                                  • BanYuner BanYuner 4

                                                    @ 明月登楼 W3 Total Cache要是会用的话,别人说是神器,默认配置都很好了

                                                      • 明月登楼 明月登楼

                                                        @ BanYuner W3 Total Cache 其实最复杂的是需要服务器端的Web服务器和PHP模块的支持才可以发挥出效果来!只有这样结合的 W3 Total Cache 才能近乎完美的面对网站高并发的http请求的。所以 W3 Total Cache 不适合小网站用,因为会拖慢小网站主机的性能的!日IP3000以上用 W3 Total Cache 效果很明显的!

                                                  • JIE JIE 1

                                                    公司网站没用开源的系统,个人网站倒是一直再用WP Super Cache,个人感觉没太大效果,可能是我还不会设置吧?

                                                      • 明月登楼 明月登楼

                                                        @ JIE WP Super Cache 插件其实需要一些服务器设置的配合的!效果我个人感觉还是很明显的!