子比主题开发文档
使用指南Codestar Framework主题扩展在线部署AI 功能推荐插件赞助打赏

Redis 与 OPcache 性能优化

梳理子比主题站点的 Redis 服务、PHP Redis 扩展、WordPress 对象缓存、OPcache、页面缓存和 CDN 加速边界。

Redis 和 OPcache 解决的是两类不同的性能问题:Redis 常用于 WordPress 对象缓存,减少数据库重复查询;OPcache 缓存 PHP 编译结果,减少 PHP 文件每次请求时的解析成本。它们不是 CDN,也不是页面缓存插件,不能替代伪静态、图片优化、数据库索引和前端资源治理。

子比主题功能覆盖用户中心、商城、论坛、支付、消息、投稿和动态模块。加速时要先区分“可以缓存的静态内容”和“必须实时计算的用户数据”。把所有页面一股脑缓存起来,往往比不开缓存更危险。

四层加速

层级作用典型组件
PHP 字节码缓存减少 PHP 文件解析和编译成本OPcache
对象缓存缓存 WordPress option、transient、查询结果和主题对象缓存Redis
页面缓存缓存游客 HTML 页面缓存插件、Nginx fastcgi_cache、OpenLiteSpeed Cache
静态资源缓存缓存图片、CSS、JS、字体CDN、浏览器缓存

建议按这个顺序启用:先确认基础环境和扩展,再启用 OPcache,再启用 Redis 对象缓存,最后才配置页面缓存和 CDN。每加一层都要重新测试登录、用户中心、支付、验证码、评论和移动端操作。

部署队列检测

本站在线部署队列已经把 Redis 和 OPcache 作为独立组件检测。检测逻辑会读取:

检测项命令或方式
PHP 版本php -r 'echo PHP_VERSION;'
OPcachephpversion("Zend OPcache")phpversion("opcache")
PHP Redis 扩展phpversion("redis")
Redis 服务redis-server --version

这也是手动排查时的基本思路:Redis 服务存在,不代表 PHP 能连接 Redis;PHP Redis 扩展存在,也不代表 WordPress 已启用对象缓存插件。

三个 Redis 概念

名称说明
Redis 服务服务器上的 redis-server,负责存储缓存数据
PHP Redis 扩展PHP 连接 Redis 的扩展,WordPress 插件需要它
WordPress 对象缓存通过插件或 drop-in 把 WordPress 缓存写入 Redis

这三者缺一不可。只装 Redis 服务,WordPress 不会自动使用;只装 PHP Redis 扩展,但没有对象缓存插件,也不会把 WordPress 查询结果写入 Redis。

Docker 部署里,队列会写入:

define('WP_REDIS_HOST', 'redis');

这是因为 Docker Compose 里的 Redis 服务名就是 redis。普通宝塔或 LNMP 环境通常使用本机 Redis,常见主机是 127.0.0.1

Redis 安装边界

宝塔路径中,队列会通过宝塔安装脚本安装 Redis。安装后会尽量把 /www/server/redis/redis.conf 绑定到本机:

bind 127.0.0.1

原生 LNMP 路径中,队列会通过系统包管理器安装 redis-serverredis,并启动服务。

Redis 不应该默认暴露到公网。除非你明确做了内网访问控制、密码和安全组隔离,否则不要开放 6379 到外部网络。大多数单机 WordPress 站点只需要本机访问。

PHP Redis 扩展

PHP Redis 扩展必须安装到“站点实际使用的 PHP 版本”。很多服务器同时存在命令行 PHP、宝塔 PHP、系统 PHP 和多个 PHP-FPM 版本。命令行 php -m 看到 redis,不代表当前站点 PHP-FPM 已加载 redis。

宝塔路径中,队列会按 PHP 版本执行安装,并重启对应 PHP-FPM:

/etc/init.d/php-fpm-82 restart

原生 LNMP 路径会优先安装版本包,例如:

apt-get install -y php8.2-redis

验证扩展:

php -m | grep -i redis
php -r 'echo phpversion("redis") ?: "";'

如果站点实际用的是宝塔 PHP,请用宝塔 PHP 路径验证,例如:

/www/server/php/82/bin/php -r 'echo phpversion("redis") ?: "";'

WordPress 对象缓存

Redis 服务和 PHP Redis 扩展准备好后,WordPress 还需要对象缓存插件或 object-cache.php drop-in。常见流程:

  1. 安装 Redis 对象缓存插件。
  2. 配置 Redis 主机、端口和数据库。
  3. 启用对象缓存。
  4. 在插件面板确认连接成功。
  5. 打开首页、文章页、用户中心、商城、论坛做一次完整测试。

对象缓存主要减少数据库重复查询。它不会自动缓存整页 HTML,也不会让图片变小。页面打开慢时,先判断慢在 PHP、数据库、远程接口、图片资源还是 CDN 回源,不要把所有慢都归因到 Redis。

OPcache

OPcache 缓存 PHP 编译后的字节码。它对 WordPress 和子比主题这种 PHP 文件较多的站点非常有价值,通常建议生产站开启。

部署队列会检测:

phpversion("Zend OPcache")
phpversion("opcache")

安装后会写入或确认这些基础配置:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

opcache.revalidate_freq=60 表示 PHP 文件变更后,OPcache 可能最多延迟一段时间才检查更新。主题或插件刚更新后,如果页面仍像旧代码,先重启 PHP-FPM 或清理 OPcache,再清页面缓存和 CDN。

开启顺序

推荐上线顺序:

  1. 跑通 WordPress、主题、固定链接、登录和媒体上传。
  2. 确认 PHP 扩展齐全。
  3. 开启 OPcache。
  4. 安装 Redis 服务和 PHP Redis 扩展。
  5. 启用 WordPress Redis 对象缓存插件。
  6. 检查用户中心、商城、论坛、支付和消息。
  7. 再开启页面缓存。
  8. 最后接入 CDN 和静态资源缓存。

不要在源站还没稳定时同时开启 OPcache、Redis、页面缓存、CDN、JS 合并和 WAF。问题叠加后很难判断是哪一层造成的。

子比主题动态页面

这些功能不要被页面缓存固定:

功能风险
登录注册验证码、登录态、跳转地址被缓存
用户中心余额、积分、消息、会员状态显示错
商城购物车购物车数量、地址、优惠、订单状态错
支付回调支付平台回调被缓存或拦截
评论和点赞Ajax 响应被缓存,状态不更新
私信和通知未读数、消息状态显示错
前台投稿表单 nonce、上传状态、审核结果错

页面缓存和 CDN 规则见 伪静态、缓存与 CDN。Redis 对象缓存通常可以开启,但遇到数据不刷新时要先清对象缓存,再清页面缓存。

缓存清理顺序

排查缓存异常时,从近到远清理:

  1. 浏览器缓存。
  2. WordPress 页面缓存插件。
  3. Redis 对象缓存。
  4. OPcache 或重启 PHP-FPM。
  5. Nginx/OpenLiteSpeed 服务器缓存。
  6. CDN 缓存。

如果刚改了 PHP 文件,重点是 OPcache 和 PHP-FPM;如果刚改了主题设置、菜单、用户数据、论坛统计,重点是 Redis 对象缓存;如果只是静态资源没更新,重点是浏览器和 CDN。

常见问题

现象优先检查
Redis 插件连接失败Redis 服务是否启动、主机端口是否正确、PHP Redis 扩展是否加载
宝塔显示 Redis 已装但插件失败站点 PHP 版本是否安装了 redis 扩展
Docker 里 Redis 连接失败WP_REDIS_HOST 是否为 Compose 服务名,容器网络是否正常
更新主题后仍是旧效果OPcache、页面缓存、CDN 是否仍缓存旧文件
登录用户看到游客页面页面缓存或 CDN 没有按登录 Cookie 绕过
用户余额/消息不刷新对象缓存未清理或缓存插件缓存了用户页面
后台变慢远程接口、数据库慢查询、对象缓存连接超时、插件冲突
页面更慢Redis 连接失败重试、缓存插件配置错误、过度合并 JS/CSS

什么时候不要开

这些情况先别急着开 Redis 或页面缓存:

  • 站点还没完成基础安装和固定链接配置。
  • PHP 错误日志还有持续致命错误。
  • 登录、支付、验证码、用户中心还没跑通。
  • 不知道如何清理对象缓存和页面缓存。
  • Redis 服务不是本机或内网,网络延迟很高。
  • 多站点、集群或主从环境还没有明确缓存前缀和隔离方案。

OPcache 通常可以较早开启,但更新或调试频繁的测试环境可以适当降低缓存时间,避免每次改代码都需要重启 PHP。

与部署页面的关系

在线部署里的宝塔、Docker、LNMP 都会把 Redis 和 OPcache 当作环境组件处理:

部署方式RedisPHP RedisOPcache
宝塔通过宝塔软件安装器补齐按 PHP 版本安装扩展按 PHP 版本安装并写入基础配置
DockerCompose 启动 redis:7-alpine取决于 WordPress 镜像和扩展取决于镜像配置
LNMP通过系统包管理器安装安装 php-redis 或版本包安装 php-opcache 并写入基础配置

队列只负责环境层准备。WordPress 里的对象缓存插件、页面缓存插件和 CDN 规则仍需要站点管理员按实际功能启用和验证。

开发边界

  • 高频 Hook 里不要每次请求都做慢查询或远程请求,先考虑对象缓存。
  • 缓存 key 要带上用户、语言、设备或业务类型,避免串数据。
  • 余额、积分、订单、会员、下载权限等数据不要只依赖缓存判断。
  • 变更论坛统计、搜索筛选、菜单结构、用户徽章后,要考虑清理对象缓存。
  • 支付回调、验证码、Ajax、用户中心和购物车不要被页面缓存。
  • 更新主题或插件后,除了页面缓存和 CDN,也要检查 OPcache。

本页吸收了子比官网“使用 Redis 和 OPcache 为网站加速”公开教程,并结合本站在线部署队列的 Redis、PHP Redis 扩展、OPcache 检测与安装实现整理。

On this page