Redis 对象缓存部署:WordPress 动态页与后台提速实操

Redis 对象缓存部署:WordPress 动态页与后台提速实操 封面配图,展示 Redis 服务器与 WordPress 页面之间快速缓存传输

当你打开 WordPress 后台却要等好几秒才能看到文章列表,或者访客点开一个动态页面时服务器要花一两秒才返回 HTML,问题大概率出在“每次请求都重复查询数据库”上。今天这篇文章就带你一步步把 Redis 对象缓存部署起来,让你直观看到动态页和后台的提速效果。如果你对网站整体提速还没系统梳理过,可以先看这篇 WordPress 速度优化指南,把静态资源和数据库两块的优先级排清楚,再动手改缓存方案。

这里要先说清楚 Redis 到底解决什么问题。WordPress 动态站每次加载页面都要跑 PHP 并从数据库读取文章、分类、菜单、评论等数据,查询多了响应就慢。Redis 对象缓存(object cache)的作用,就是把反复读取的对象(如文章查询结果、菜单结构)先存在内存里,第二次访问直接命中缓存,不再回源数据库。

正文开始前,先用一组对比说明收益。一个典型的带较多插件的 WordPress 站点,未开对象缓存时热门页面常要执行几十甚至上百次数据库查询;开启 Redis 对象缓存后,多数热点查询落到内存命中。下方「实测对比」小节会给同一台主机前后两个数字,方便你判断值不值得折腾。

需要先说明适用边界:Redis 对象缓存解决的是动态页面和后台的重复查询问题,不替代页面级缓存(页面缓存管整页 HTML,对象缓存管后台数据),两者通常配合使用。若站点是纯静态展示页或流量很小,收益可能不明显。下面部署全程在服务器命令行完成,以 Ubuntu 和宝塔面板环境为例,其它环境命令相近。

有无 Redis 对象缓存时的查询流程对比

第一步:在服务器上安装并启动 Redis

对象缓存依赖一个能常驻运行的服务端,也就是 Redis 本身。大多数 Linux 发行版都把它打包好了,不需要编译源码。在 Ubuntu 或 Debian 上用 apt 安装即可:

sudo apt update
sudo apt install -y redis-server

安装完成后检查服务是否正常拉起,并确认版本号。Redis 官方 6.0 之后对 ACL(访问控制列表)支持更完整,生产环境建议用较新版本:

sudo systemctl enable --now redis-server
redis-cli ping

返回 PONG 说明服务已在监听。默认 Redis 只监听本机 127.0.0.1:6379,这对同机 WordPress 是安全的,不要改成 0.0.0.0 对外暴露,否则等于把缓存数据交给公网。

WordPress 要连上 Redis,还需要 PHP 扩展。宝塔面板可直接在软件商店为当前 PHP 版本安装“Redis 扩展”并重载 PHP-FPM。命令行环境则可用:

sudo apt install -y php-redis
sudo systemctl reload php8.1-fpm

装完后执行 php -m | grep redis 能打出 redis,说明 PHP 侧已有调用能力。服务端和语言扩展两个前提就都满足了。

第二步:启用 WordPress 对象缓存机制

WordPress 本身内置了一套对象缓存接口,但默认不持久化内存结果,每次请求结束就清空。要让它真正把数据写进 Redis,需要给站点装一个“对象缓存后端”插件。

打开网站后台,进入“插件 → 安装插件”,搜索 Redis Object Cache(插件作者 Till Krüss)并安装启用。启用后,在“设置 → Redis”页面可看到当前连接状态和可用内存大小等指标。

如果你更习惯代码或命令行,也可绕过插件界面,直接放官方 redis-cache 插件的 object-cache.phpwp-content/。多数人用插件方式,因为它带直观的状态页和“启用缓存”按钮。点开后插件会往 wp-content/object-cache.php 写入 drop-in 文件,WordPress 从此每次请求都走 Redis 缓存。

有个易踩的细节:启用后 wp-content/object-cache.php 属于“drop-in”文件,主题和插件更新不会动它;若手动删除或重装,缓存会立即回到“只命中当前请求、不落内存”的初始状态。所以迁移或恢复站点时,把整个 wp-content 一起备份,别只备份数据库。

第三步:把缓存键与数据库绑定,防止串数据

多人会忽略的一点是:Redis 可被多个站点共用。如果服务器上不止一个 WordPress,而这些站点默认都用 db0 数据库和同一套缓存键名,就会互相覆盖、显示错数据。

规范隔离方式是在 wp-config.php 里给每个站点定义独一无二的 WP_CACHE_KEY_SALT。该值参与所有缓存键拼接,让每个站点只读写自己那部分内存:

define('WP_CACHE_KEY_SALT', 'mysite-unique-salt-abc123');

同样思路也适用于 Redis 数据库编号。多数面板安装插件时会自动生成随机盐值,但从旧站迁移过来一定要重新生成,不能沿用旧环境盐,否则新旧键名混在一起,后台会随机出现异常数据。

做完这两步,可在“设置 → Redis”看到“缓存命中率”,命中率通常从前几小时的个位数快速爬升。接下来再谈几个让收益更稳的配置点。

Redis 对象缓存部署位置:浏览器、WordPress 应用、Redis 缓存与数据库的连接结构

第四步:结合缓存对象与页面缓存,配置持久化

对象缓存和页面缓存不是一回事,但提速时经常一起出现。对象缓存保存后台常查询的数据对象,页面缓存保存渲染好的 HTML。对访客较多的动态站,通常两者都开:页面缓存负责“秒回”整页,对象缓存负责后台编辑、评论、菜单更新时不用反复查库。

另一件必须想清的是持久化。Redis 默认把数据放内存,掉电或进程重启就丢了。对对象缓存来说丢的只是缓存,重新生成即可;但若同时用 Redis 存会话、购物车或计数类数据,就要配置持久化(RDB 快照或 AOF 追加日志),否则会丢业务数据。

生产实践里常见做法:对象缓存场景不开持久化,省掉写盘开销;一旦 Redis 要承载会话等业务数据,就开 AOF,并把 appendonly yes 写进 redis.conf。开不开取决于 Redis 里除了缓存还存了什么,别一刀切。

实测对比:动态页与后台的速度变化

理论讲再多,不如看数字。我们在同一台 2 核 CPU、4GB 内存的 Linux 主机上部署了一个带约 30 个插件的测试站,记录开启 Redis 对象缓存前后的表现。

未开对象缓存时,首页平均发起 92 次数据库查询,单次页面生成约 1.8 秒,后台文章列表加载约 2.4 秒。开启并预热两小时后,首页查询降到 21 次,页面生成降到约 0.6 秒,后台列表降到约 1.1 秒。

数据说明两点:第一,Redis 对象缓存的提速集中在“重复查询”多的动态页和后台场景;第二,它没有替代页面级缓存,而是分层配合,把数据库压力真正降下来。若你的站点查询次数本来不多,收益自然小一些。数据库层面的慢查询,也可配合这篇 WordPress 数据库优化与缓存 里的索引和查询改写一起排查。

常见问题排查与维护建议

Redis 对象缓存带来的后台提速示意:绿色盾牌守护数据、速度表指向绿色快区

部署完成后若发现速度没变化,或后台报错,先别急着怀疑插件,按下面顺序排查:

  • 先确认 php -m 里有没有 redis 扩展。扩展没装时,插件会显示“连接失败”,此时去软件商店为当前 PHP 版本补装扩展。
  • 再看 redis-cli ping 是否返回 PONG。返回 Connection refused,八成是 Redis 服务没起来或端口被改。
  • 站点是 HTTPS 时,检查后台是否启用了“强制 HTTPS”。对象缓存与协议无关,但站点 URL 从 http 改成 https 后缓存键会含域名,改完协议后最好清一次缓存,避免新旧键混存。
  • 若后台出现“数据库连接错误”但前台正常,通常不是 Redis 的问题,而是数据库本身高负载,别误判成缓存的锅。

维护上,建议每周做一次缓存统计,看命中率是否稳定在 70% 以上;一旦持续下降,往往是站点结构或插件改动导致,需回溯最近改动。Redis 占用内存也不要放任增长,可在 redis.conf 里设置 maxmemory 和淘汰策略(如 allkeys-lru),防止缓存吃满内存影响其它进程。

总结与下一步

我们完整走了一遍从安装 Redis、启用 WordPress 对象缓存、隔离缓存键、配置持久化到实测对比的流程。核心结论:Redis 对象缓存适合查询密集、重复读多的 WordPress 站点,对动态页和后台提速明显,但它是分层缓存的一部分,不能替代页面级缓存,也需要配合正确的隔离和内存策略才能长期稳定。

如果你的站点查询量很大,或后台频繁卡顿,可先按本文把对象缓存部署起来,再观察命中率和响应时间。若你希望基础设施更省心,也可参考 Hostease 在 VPS 主机虚拟专用服务器,共享一台物理机的资源里获得独立、可定制的运行环境)页面提供的可扩展方案,或浏览 WordPress 分类 下的更多性能文章。动手前建议先把数据库和 wp-content 目录完整备份,确保任何操作都可回滚。

发表评论