梦随乡兮 标志

WordPress 部署与运维实战(4/6):Redis 对象缓存实操

2024/04/17
约 5 分钟阅读

如果你还没有搞清楚 页面缓存对象缓存 的区别,建议先看前一篇:

这一篇只做一件事:把 Redis 对象缓存 在 WordPress 里真正跑起来,并把多站隔离和常见报错一起讲清楚。

一、开始前先确认目标

Redis 在这里承担的是 对象缓存(Object Cache),核心作用是减少 WordPress 对数据库的重复查询。

它最适合下面这些场景:

  • 同一台服务器上跑多个 WordPress 站点
  • 后台、首页或高频查询页面明显变慢
  • 你已经在做页面缓存,但数据库查询压力依然偏高

二、安装 Redis 服务与 PHP Redis 扩展

如果你现在跑的是 1Panel 环境,流程可以按下面来:

  1. 在 1Panel 应用商店里安装 Redis
  2. 打开当前 WordPress 所使用的 PHP 运行环境
  3. 在 PHP 扩展里启用 redis
  4. 保存后等待运行环境重建完成

这一步的目标很简单:

  • 服务器里真的有 Redis 服务在运行
  • 当前 PHP 环境真的能调用 Redis 扩展

如果少了任意一个,WordPress 插件都会报“Redis 不可访问”或“扩展不存在”。

三、安装 WordPress 插件

进入 WordPress 后台,安装并启用 Redis Object Cache 插件。

插件装好后先不要急着点各种优化按钮,先把连接参数写清楚,否则你看到的“可访问 / 不可访问”状态很容易反复横跳。

四、在 wp-config.php 里明确写入连接参数

建议直接在 wp-config.php 中写清楚 Redis 连接信息,而不是完全依赖插件自动探测。

define('WP_CACHE_KEY_SALT', 'example.com');
define('WP_REDIS_SELECTIVE_FLUSH', true);
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PASSWORD', '替换成你的 Redis 密码');

这几个参数里,最值得解释的是下面两个:

WP_CACHE_KEY_SALT

这是给缓存键加前缀。

如果一台服务器上有多个 WordPress 站点,却共用一套 Redis,这个值几乎就是必填项。建议直接使用站点域名或一个稳定、唯一的站点标识。

WP_REDIS_SELECTIVE_FLUSH

把它设为 true 后,刷新缓存时会尽量只清理当前站点对应的缓存键,而不是把整台机器上共用 Redis 的缓存一把清空。

对于多站点环境,这个参数很有用。

五、1Panel / Docker 环境下的两个关键点

1. 为什么 WP_REDIS_HOST 常常写成 redis

在 1Panel 的 Docker 网络里,很多应用是通过 容器名或服务名 互相访问的。

因此只要你的 WordPress 运行环境和 Redis 在同一个可互通网络里,redis 这种主机名通常就能直接使用。

如果你在 1Panel 的“Redis 连接信息”里看到的是别的容器连接地址,也可以按面板显示的值来写,以实际网络环境为准。

2. 插件仍提示 “Redis 不可访问” 时看什么

如果你已经在 wp-config.php 里写了参数,插件仍然报错,优先检查下面几项:

  1. Redis 容器是否真的在运行
  2. PHP Redis 扩展是否已经启用
  3. WP_REDIS_PASSWORD 是否与面板展示的密码一致
  4. WP_REDIS_HOST 是否与容器网络中的实际连接地址一致

如果这些都对,但插件还是无法连通,再去检查 wp-content/object-cache.php 里最终生成的连接参数是否与 wp-config.php 一致。

重点看:

  • 主机地址是不是还停留在错误值
  • 密码有没有被正确带进去

如果插件生成的参数不对,修正后再刷新后台状态页确认。

六、多站点环境一定要做缓存隔离

早期我在多站点环境里踩过的一个坑,就是多个站点都在用 Redis,但没有做清晰的缓存键隔离。

这会带来两个问题:

  • 某个站点刷新缓存时,可能把别的站点的缓存也一起清掉
  • 站点之间的缓存命中和污染会变得不可控

因此,无论你是旧宝塔环境还是现在的 1Panel 环境,只要是 多站共用 Redis,都建议至少做好这两件事:

  1. WP_CACHE_KEY_SALT 使用唯一前缀
  2. WP_REDIS_SELECTIVE_FLUSH 设为 true

七、怎么确认对象缓存已经真的生效

你可以从三个角度确认:

1. 看插件状态页

WordPress 后台的 Redis Object Cache 页面里,会直接显示是否已连接、是否已启用对象缓存。

2. 看 Redis 监控或面板命中情况

如果你刷新几次首页、文章页和后台页面后,Redis 侧出现了命中与读写活动,说明对象缓存已经在工作。

3. 看站点的实际体感

对象缓存不是银弹,但在数据库查询较多的 WordPress 场景里,后台和首页通常会更稳一些,尤其是在小规格 VPS 上。

小结

这篇实操可以压缩成一句话:

  • 先把 Redis 服务和 PHP Redis 扩展装好
  • 再用 wp-config.php 明确写连接参数
  • 多站点一定做缓存键隔离
  • 如果插件还报错,就检查最终生成的连接参数

这样配置下来,Redis 对象缓存基本就能在 WordPress 里稳定跑起来。