niihost

WordPress Object Cache Pro 插件解疑与推荐配置

WordPress Object Cache Pro 是一款适用于 WordPress 的专业级 Redis 对象缓存插件。因其性能出众被很多网站采用,并且是 WordPress 官方推荐的数据缓存方案。本文将深入浅出的为大家解答各种使用中的问题或疑惑。

为什么选择 Redis 作为缓存?

WordPress 支持 Redis 和 Memcached 作为对象缓存器,它们都是流行的开源内存数据存储。如果要详细对比的话,各有优势,限于篇幅,这里不展开讨论,但 Redis 有几处优势是 Memcached 不具备的。

  1. 异步操作: Redis 支持异步和非阻塞 I/O 操作,使应用程序能够处理更多并发任务。
  2. 高级数据结构:除了 Memcached 也支持的字符串之外,Redis 还支持列表、集合、有序集合、哈希、位数组和超日志。应用程序可以使用这些更高级的数据结构来支持各种用例。例如,可以使用 Redis 有序集合轻松实现各类排行榜,其中保存按排名排序的各种列表。
  3. 快照功能:Redis 可以将数据保存在磁盘上,并保留时间点快照,用于存档或恢复。即使遇到宕机,数据也很难丢失。
  4. 复制功能:Redis 允许创建多个副本(从节点),从而扩展数据库读取能力并实现高可用性集群。

以上并不是完整的 Redis 特性清单,但足以说明它与 Memcached 之间的差异,且支撑我们推荐 Redis 的理由。

在处理简单缓存任务时,Memcached 可能稍快。然而,对于一个小型且简单的网站而言,是否使用对象缓存还需要探讨。一般来说,我们推荐数据较多且功能复杂的网站使用对象缓存。例如,在 WordPress 中使用 WooCommerce 或 Elementor 等设计工具添加大量动态功能的站点,使用对象缓存会更合适。

使用 Object Cache Pro 插件后是否还需要使用静态缓存插件?

静态缓存是 WordPress 网站最快速的缓存方式,它将网页直接以 HTML 代码形式保存,供用户访问时调用。

然而,这种方式并不适合所有类型的页面。例如,WooCommerce 的产品页可能需要实时显示用户可以享受的折扣或库存状况等信息。在这种情况下,需要实时处理数据查询,Object Cache Pro 插件的对象缓存就能大显身手。在已缓存的状态下,无需读取 MySQL 数据库,直接从内存返回查询结果。

一个综合型网站通常有静态网页也有动态展示或交互的网页,所以我们推荐同时使用 Object Cache Pro 插件与静态缓存插件,这样网站的整体速度会大幅提升,用户体验更丝滑。

Object Cache Pro 插件常见问题解答

使用 Object Cache Pro 插件的必要条件有哪些?

Object Cache Pro 有一些系统要求,需要确保您的服务器满足以下要求:

Redis 数据库可以安装在服务器本机也可以通过远程连接,像阿里云、腾讯云等都推出了 Redis 数据库产品。

宝塔面板的用户支持一键安装 Redis 数据库与 PhpRedis 扩展,在 PHP 的设置界面 > 安装扩展,找到 Redis 并点击旁边的安装链接即可自动安装(包含 Redis 数据库)。

WordPress Object Cache Pro 插件解疑与推荐配置

Object Cache Pro 插件为什么没有设置选项页面?

Object Cache Pro 插件也许是基于性能考虑,它不通过设置选项页面进行自定义,而采用执行效率更高效的方式,通过定义 wp-config.php 文件中的常量来设置参数。

多个 WordPress 网站能使用同一个 Redis 数据库吗?

一个 Redis 主机支持多个数据库,Redis 默认支持 16 个数据库,这些数据库通过索引(从 0 到 15)来标识。

Redis 理论上没有硬性限制最多支持多少个数据库,但实际使用中需要考虑到内存大小和性能的问题。

一般情况下,不同的网站应使用不同的数据库(可以是同一个主机),以避免数据被重写/覆盖造成冲突。如果实在是因特殊原因,要让多个网站使用同一个 Redis 数据库,可以在 Object Cache Pro 插件的配置项中为不同的网站指定数据表前缀,如以下示例:

define('WP_REDIS_CONFIG', [
    'prefix' => 'DBname', //指定不同的数据前缀
]);

为什么启用了 Object Cache Pro 缓存后没有感觉网站速度快了?

网站的浏览速度是一个综合结果,它取决于很多因素,如:Web 软件的响应速度、PHP 的执行效率、数据库的IO速度,以及服务器的性能与带宽等等。使用对象缓存主要解决的是数据库的读取速度。以下几个情况值得了解:

  1. 在对象缓存刚启用时,网站大部分数据尚未缓存完毕的状态下甚至可能出现速度下降。
  2. 仅能缓存符合 WordPress 编码规范的数据(WordPress 中有些插件编码是不符合规范的),可以在 Object Cache Pro 插件中查看具体哪些数据被缓存了,示例如下:

WordPress Object Cache Pro 插件解疑与推荐配置

笔者以 WordPress 6.5.5 默认安装做了一个测试,启用对象缓存之前的等待服务器响应的时间(TTFB)平均在 210ms 至 240ms 之间,启用缓存后该时间的平均值大约降至 160ms 左右。

需要说明的是,动态内容的页面使用对象缓存加速效果更好,对于 WordPress 6.5.5 默认安装的首页而言,使用静态缓存且进行适当的配置可以将 TTFB 时间降低至 30-60ms。

Redis 缓存占用内存过大,有什么办法?

对于数据量较大的站点而言,确实应该关注内存占用情况,首先应该为 Redis 设置内存上限,避免因内存占用过大导致服务器资源耗尽而宕机。内存上限具体设置的数值应该结合服务器的空闲内存与网站数据量情况做出衡量。

Object Cache Pro 插件支持几种节约内存的功能,需要在设置中定义相应的参数才能开启。

  • MaxTTL:缓存最大生存时间(以秒为单位)。缓存到期后,会被清除释放内存。但该值如果设置太低,则无法让缓存发挥最佳的加速效果。一般网站建议设置为 3-7 天,内容不用经常翻新的网站可以设置更久。
  • Serializer:可以使用 igbinary 二进制数据序列化器以紧凑的二进制形式存储 WordPress 数据结构,从而将 Redis 内存使用量和网络 I/O 减少约 50%。
  • Compression:支持的数据压缩算法有 lzf、lz4 和 zstd。所有算法都需要 PhpRedis 编译时添加了相应的参数以启用它们(默认没有开启任何压缩)。

以上几种节约内存的方式设置示例:

'maxttl' => 86400 * 7, // 缓存最大生命周期,7天
'compression' => 'lz4', // 'zstd' 压缩更小,'lz4' 更快。需确认主机支持。
'serializer' => 'igbinary', //二进制数据序列化

专家配置示范

// Object Cache Pro 配置代码开始
define('WP_REDIS_CONFIG', [
'token' => '这里用许可证密钥替换',
//'password' => 'password',  // 如果redis设置了密码,则需要设置
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0, // 针对每个站点进行更改,不能相同
'maxttl' => 86400 * 7, // 缓存最大生命周期,7天
'timeout' => 2.5,
'read_timeout' => 2.5,
'retry_interval' => 10,
'retries' => 3,
'backoff' => 'smart',
//'compression' => 'lz4', // 'zstd' 压缩更小,'lz4' 压缩更快
'serializer' => 'igbinary',
'async_flush' => true,
'split_alloptions' => true,
'prefetch' => true,
'strict' => true,
'debug' => false,
'save_commands' => false,
'prefix' => 'site0',   // 自定义表前缀
	// (array) The analytics configuration
'analytics' => [
	// 是否收集和显示分析数据
	'enabled' => true,
	// 缓存刷新后是否恢复分析数据
	'persist' => true,
	// (整数)清除分析之前保留分析的秒数
	'retention' => 60 * 60 * 2,
	// (bool) 是否打印带有非敏感指标的 HTML 注释
	'footnote' => false,
],
'non_persistent_groups' => [
	'wc_session_id',
	'*-queries', // 支持通配符
	'_transient*',
	],
'non_prefetchable_groups' => [
	'wc_session_id',
	'*-queries', // 支持通配符
	'_transient*',
	],
]);
define('WP_REDIS_DISABLED', false);
// Object Cache Pro 配置代码结束

上面的配置适合绝大部分网站,开启了二进制数据序列化、缓存预取等,并禁止在网页 HTML 代码中输出插件信息。如果确认服务器安装的 PhpRedis 支持 lz4 算法压缩,可以将’compression’前面的双斜杠去掉。

最后注意 ‘database’ 与 ‘prefix’ 的值不要与同服务器的其它网站冲突。

给TA赏糖
共{{data.count}}人
人已赏糖
技术分享

WordPress网站后台的文章列表增加删除文章及图片的链接按钮

2024-11-29 20:43:50

技术分享

免插件实现WordPress HTML 压缩

2024-11-30 1:18:03

0 条回复 A文章作者 M管理员
技术宅评论
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索