配置 Memcached 内存缓存为 WordPress 提速

配置 Memcached 内存缓存为 WordPress 提速

文章目录
  1. 1. 安装 PHP 的 Memcached 扩展
  2. 2. 安装 WordPress 插件
  3. 3. 激活 Memcached 内存缓存
  4. 4. 查看 Memcached 缓存效果
  5. 5. 清除 Memcached 缓存
  6. 6. WordPress 其他优化

利用 Memcached 内存缓存为 WordPress 提速这可以算是广大 WordPress 站长的基本操作,大多数缓存加速插件也会调用这一模块,但使用情况到底如何,很多小白博主可能并不知晓。就拿我来说,我虽数年前就在系统中安装了 Memcached 扩展模块,直到近期才发现它根本就没用上,命中率为零…因而同样的,本文仅是我的折腾经验总结,是一篇个人笔记,可能也是小白们听得懂的实用教程。

首先,Memcached 内存缓存的作用是什么?简单点说它的作用是将访客浏览需要调取的动态数据1缓存在内存中(它也能缓存静态数据,此处主要用于缓存数据库内容),以减少系统查询数据库的次数,从而提高网站的响应速度。以本站为例,在开启内存缓存前,首页需要查询 100 次左右数据库,现在只需要查询不到 30 次了,优化效果显著。

WordPress 配置 Memcached 内存缓存的方法相对简单,顺利的话利用官方出的插件简单几步就可完成:1、首先给 PHP 安装 Memcached 扩展,2、然后将扩展插件放入 WordPress 系统中的wp-content目录,3、配置网站根目录下的wp-config.php文件开启缓存,完。


等等还没完,哪有这么顺利的事情呐…我本人在配置 Nginx fastcgi_cache 缓存为网站提速就提过,我本是要先安装 Memcached 对数据进行缓存,然后再安装 fastcgi 让它两相互配合使用,不幸当时安装 Memcached 失败了。那会儿我拿着那段报错提示搜刮了中文、英文、日文甚至俄文的相关资料,均没有获得正确的解决方案,错误提示如下:

Fatal error: Uncaught Error: Call to undefined function wp_cache_init() in /www/wwwroot/shephe.com/wp-content/advanced-cache.php:389 Stack trace: #0 /www/wwwroot/shephe.com/wp-settings.php(96): include() #1 /www/wwwroot/shephe.com/wp-config.php(107): require_once('/www/wwwroot/sh...') #2 /www/wwwroot/shephe.com/wp-load.php(50): require_once('/www/wwwroot/sh...') #3 /www/wwwroot/shephe.com/wp-blog-header.php(13): require_once('/www/wwwroot/sh...') #4 /www/wwwroot/shephe.com/index.php(17): require('/www/wwwroot/sh...') #5 {main} thrown in /www/wwwroot/shephe.com/wp-content/advanced-cache.php on line 389

当时我尝试升级插件、停掉缓存、更新 PHP 版本、更新 Memcached 等均没有解决上述报错,且互联网上关于此条报错的信息非常少且年代久远,都没啥用。直至今夜,我才猜想它可能和一条命令有关……本站遭遇木马侵扰已久,前段时间我尝试了宝塔面板的各种安全插件,其中就有官方出的堡塔企业级防篡改,该插件用于防止黑客非法修改网页、网站挂马等。启用该插件之后有一定效果,但副作用是在 wp-content 目录下产生了无数个名为temp-write-test-***的空文件。为了杜绝其生成,我参照网上的办法在 WordPress 配置文件中加入了一行define('FS_METHOD', 'direct');,而它似乎正是本站无法启用 Memcached 的罪魁祸首。

按说这行代码的作用2和 Memcached 缓存没啥关系,但就是一直报错,你说可气不可气。好了废话不说了,以下正文开始,以 WordPress 6.5.2+Php 8.2+宝塔 8.0x+Memcahced 1.26 这一现目前最新的系统详细介绍 WordPress 配置 Memcached 的方法和注意事项(比较啰嗦)。

1. 安装 PHP 的 Memcached 扩展

进入宝塔面板的软件商店,找到你 WordPress 正在使用的 Php 版本,点击设置-安装扩展-安装 memcached,同时建议安装opcache加速 PHP 脚本。片刻后扩展安装好了,不出意外的话软件商店里同步安装了 Memcached 1.6.26 主模块软件,若没有请手动安装(先服务后扩展)。

此步骤需要注意的点是:1、必须同时安装 Memcached 服务端和 Php 扩展;2、Memcached 和 Memcache3一字之差,但完全不是一个东西,须甄别。

2. 安装 WordPress 插件

点击此处下载附件,将其解压后得到三个文件,其中object-cache.php文件为开启 Mecached 动态缓存的插件,作用是将查询数据库的动态内容缓存在内存中。advanced-cache.php是用于将 HTML 静态内容缓存进内存,如 WP Super Cache、W3 Total Cache 等知名静态缓存插件均调取了这一拓展。它两名为插件实为 WordPress 的强化拓展4,因此特别注意别搞错:此二文件的工作目录为 wp-content 而非 wp-content/plugins/。memcached.php是一个探针,待会儿一切完工后可用它查看缓存的工作状态。

建议先上传第一个文件(object-cache.php)wp-content目录启用动态缓存,如有必要再将第二个文件(advanced-cache.php)上传开启静态缓存。一般来讲这两个文件不需要做额外修改,如果需要对缓存做自定义的话可以修改 advanced-cache.php 这几处数值,都给你翻译好了:

var $max_age = 300; // 缓存过期时间(0 表示禁用 batcache)
var $remote = 0; // 禁止向远程数据中心发送缓冲区(从不发送 req/sec)
var $times = 2; // 一个页面被访问了多少次之后进行缓存(两个或两个以上)
var $seconds = 0; // …在这么多秒内(0 表示忽略它,立即使用 batcache)
var $group = 'batcache'; // memcached 组的名称。您可以通过更改此选项来模拟缓存刷新。
var $unique = array(); // 如果您有条件地提供不同的内容,请将变量值放在这里。
var $vary = array(); // 函数数组,用于 create_function。返回值被添加到上面的$unique 中。
var $headers = array(); // 在这里添加头作为 name=>值或 name=>数组(值)。这些将与缓存中的每个响应一起发送。
var $cache_redirects = false; // 设置 true 启用重定向缓存。
var $redirect_status = false; // 这将在重定向期间设置为响应代码。
var $redirect_location = false; // 这被设置为重定向位置。
var $use_stale = true; // 更新缓存时是否可以返回过期的缓存响应?
var $uncached_headers = array('transfer-encoding'); // 这些头将永远不会缓存。应用函数。
var $debug = true; // 设置 false 以隐藏 batcache 信息 <!-- comment -->
var $cache_control = true; // 将 false 设置为禁用 Last-Modified 和 Cache-Control 头
var $cancel = false; // 更改此选项以取消输出缓冲区。使用 batcache_cancel ();
var $noskip_cookies = array( 'wordpress_test_cookie' ); // cookie 的名称——如果它们存在并且缓存通常会被绕过,那么不要绕过它。

3. 激活 Memcached 内存缓存

编辑 WordPress 根目录下的wp-config.php文件,在if ( !defined('ABSPATH') )之前的任意位置添加如下代码:

//设置缓存头,这里 shephe.com 作为缓存密钥随意设置,此三个开关 务必 放在 wp-settings.php 之前
define('WP_CACHE_KEY_SALT', 'shephe.com');
//激活 Memcached
define('ENABLE_CACHE', true);
//启用静态缓存时开启
//define("WP_CACHE", true);

其中第一行作为缓存密钥是可选的(单一站点可不用),用以区分多个 WordPress 站点的缓存数据,各个网站间应设为不同的值,后两行为缓存开关。请检查整个文件注意不要重复添加上述代码。

4. 查看 Memcached 缓存效果

<!--<?php echo get_num_queries().'次查询,耗时'.timer_stop(0).'秒。'; ?>-->

如果你在主题页脚添加过类似上述代码,此时已能很直观地看到数据库查询数降下来了。不过最保险的办法是在 Memcached 面板中查看命中率,以确认内存缓存是否生效。如果你使用的是宝塔面板,直接在软件商店中找到 Memcached 服务模块,点设置查看负载状态,只要有相对较高的命中率那么缓存状态就是正常的。

宝塔面板查看Memcached负载状态
宝塔面板查看 Memcached 负载状态

除此以外,你还可以将压缩包中的memcached.php上传到服务器中特定目录,通过访问该文件(用户名密码在文件中指定)查看缓存的工作状态,如下图所示:

Memcached Panel
Memcached Panel

5. 清除 Memcached 缓存

第 3、中代码第一行定义了缓存的老化时间,若你想手动清除 Memcached 缓存,目前最简单有效的的办法是重启 Memcached 服务模块。至此,本文教学部分完结,以上部分内容参考了WordPress 果酱老白博客

6. WordPress 其他优化

开启 Memcached 动态缓存后,建议同时使用 Nginx fastcgi_cache 缓存加速 Php 的响应。它两是不同的缓存方法,可以一起使用来提高网站的性能和速度。fastcgi_cache 是由 Nginx 提供的一种缓存机制,可以将动态生成的 PHP 页面缓存为静态文件,从而减轻服务器负载。而 Memcached 是一种分布式的内存对象缓存系统,用于存储键值对数据。在使用这两种缓存方法时,可以将 fastcgi_cache 用于缓存静态页面和动态页面的部分内容,而将 Memcached 用于缓存数据库查询结果和其他需要频繁读写的数据。这样可以充分利用两种缓存方法的优势,提高网站的整体性能。

根据实测,开启 Nginx fastcgi_cache 缓存+Memcached 动态缓存效果最佳,再额外开启静态缓存包括第三方插件以后性能会下降,且似乎开启 Memcached 静态缓存后 fastcgi_cache 就不工作了。我本次两个站启用 Memecached 后并没有直观感受到速度的变化,一则是本来已经够快,二是因为 Memcached 缓存是应对大流量多数据查询而生的,咱流量太低……因此我更建议使用 fastcgi_cache,提速效果可谓立竿见影!除此要优化 WordPress 网站,还可以考虑以下几点:

  1. 数据库优化:定期清理无用数据、优化数据库表结构、使用数据库优化插件(如 Easy WP Cleaner、WP-Optimize)来提高数据库性能;
  2. CDN 使用:使用内容分发网络(CDN)来加速静态文件的传输,减少页面加载时间;
  3. 代码优化:确保主题和插件的代码质量良好,避免冗余代码和低效的查询操作;
  4. 服务器优化:考虑使用高性能服务器、调整服务器配置以适应网站的需求。

  1. 咱们的 WordPress 网站由静态文件、程序集、数据库构成,静态文件包括网站的图片、样式表和 JavaScript 文件等;程序集则包括 WordPress 的核心文件、主题和插件;数据库则存储了网站的内容、用户信息和其他动态数据。 ↩︎
  2. define('FS_METHOD', 'direct'); 这行代码的作用是告诉 WordPress 使用直接文件系统方法来进行文件操作,而不是通过 FTP 或 SSH 等其他方式。这通常用于在 WordPress 中执行文件操作,如安装插件、主题更新等,而无需输入 FTP 凭据。这样可以简化文件操作流程,提高用户体验。 ↩︎
  3. Memcached 和 Memcache 是两种不同的内存缓存系统。它们在功能上类似,但有一些区别。
    Memcached 是一个高性能、分布式的内存对象缓存系统,通常用于加速动态网页应用程序,减轻数据库负载。它支持分布式特性,可以水平扩展,适用于大型应用程序和复杂的缓存需求。
    Memcache 是一个较早的内存缓存系统,也用于缓存数据以提高性能。与 Memcached 相比,Memcache 在某些方面存在一些限制,例如无法直接存储字面值的 FALSE,以及缺少一些高级功能。 ↩︎
  4. 强化拓展(Enhancements):强化拓展是一种广义的术语,用于描述对系统或应用程序功能进行增强、扩展或改进的方法。它可以包括各种形式的修改、添加、优化或增强,以提供更多功能、性能或用户体验的改善。在 WordPress 中,强化拓展可以指代各种方法,如代码片段、自定义功能、主题模板修改等,用于对 WordPress 进行定制和增强。 ↩︎
1460 730 Kevin's
「配置 Memcached 内存缓存为 WordPress 提速」有 15 条评论
  • 2broear
    04/28/2024 at 14:03 回复

    学习了,之前一直没配置对!

  • […] 180 次,这还了得?!我前几天好不容易才用上了Memcached 缓存把查询量降到 30 以下!于是又一通折腾,发现 kk star ratings […]

  • 明月登楼
    04/24/2024 at 17:26 回复

    唉,新搭建的OpenLiteSpeed下Memcached总是不成功,不知道如何给LSPHP安装Memcached的扩展!

    • 的头像
      Kevin
      04/26/2024 at 09:01 回复

      折腾不痛就换一种方式吧……非专业人士去尝试修bug脑壳脱层皮也是搞不好的,,,我反正体验了发现fastcgi缓存效果比memcached好多了~

  • 夜未央
    04/15/2024 at 17:14 回复

    我也用这个,感觉还是有效果的,不过据说对大流量效果明显,像我这种没有几个流量的可能心理作用更明显。

    • 的头像
      Kevin
      04/15/2024 at 19:11 回复

      你说的对,我最后也测试了,这玩意儿对小站影响不那么大的,,,Memecahced对本站的提升微乎其微,对我另一个站甚至是负优化(流量更大,但是更简洁)。

      我看你站没有fastcgi缓存,可以试试,我那篇文章写的非常细了,效果立竿见影,让我从一两秒的访问到了0.3秒左右~

  • obaby
    04/15/2024 at 14:22 回复

    最后带标号的行间距和上方其他文字的行间距不一样吧?
    带标号的太密集了

    • 的头像
      Kevin
      04/15/2024 at 19:12 回复

      那是古腾堡自带的 “注脚”,我正好实施效果,我酌情看怎么修改。。暂时觉得:都不好看。不过那儿修改与否不影响其他的,因为几乎不会用到。

      我这字号会不会太大了?

  • 1900
    04/15/2024 at 13:42 回复

    感觉正文行间距可以再高一些,太密了看起来有些吃力。

    • 的头像
      Kevin
      04/15/2024 at 19:12 回复

      我考虑下,我这正文的字体字号是不是稍微有些大了?

      • 1900
        04/15/2024 at 23:04 回复

        我到不觉得字号大,之前用的二〇一九主题字号也和你这个差不多。
        刚刚试了一下2rem的间距挺合适的,没有那么拥挤了,你可以参考一下。

        • 的头像
          Kevin
          04/17/2024 at 08:56 回复

          听劝,我改了下行距,但是我还是感觉 2rem稍微太大了些哈哈哈

          • 1900
            04/17/2024 at 09:59 回复

            我看了下目前的间距好像和2rem差不多太多,

  • xige
    04/15/2024 at 09:14 回复

    近期你这更新速度可以喔,全是干货,这两天我也搬家服务器,有WP站,搞完一项一项来学习

    • 的头像
      Kevin
      04/15/2024 at 19:13 回复

      是哈,最近瞎折腾,欢迎多交流~

发表评论

请输入关键词…