Redis 缓存失效主因是 PHP 扩展未正确加载、连接参数不匹配或插件冲突;需检查 bind 地址、phpinfo 中 redis 支持、PHP 重载+重启、端口与密码严格一致、禁用其他对象缓存插件,并用 TCP 连接避权问题。

直接开 Redis 缓存能显著降低 WordPress 的数据库查询次数,但光装上 Redis 服务、装个插件、点一下启用,90% 的人会卡在「Status: Disconnected」或者缓存命中率始终为 0。根本原因不是 Redis 没跑起来,而是 PHP 扩展没加载对、连接参数不匹配、或插件与当前环境存在隐性冲突。
Redis 服务状态正常 ≠ PHP 能连上
宝塔里看到 Redis 状态是「运行中」,不代表 PHP 进程能访问它。常见错误现象包括:Connection refused、phpredis extension not loaded、WordPress 后台 Redis 插件页显示 Status: Disconnected。
- 先确认 Redis 绑定地址:进入宝塔「Redis 设置」→「配置修改」,检查
bind是否为127.0.0.1(不能是0.0.0.0或注释掉) - 再查 PHP 扩展是否真正启用:创建
info.php,内容为<?php phpinfo(); ?>,访问后搜索redis,必须看到redis support => enabled和Redis Version => x.x.x - 若已安装扩展但未生效,不要只点「重启 PHP」,要进宝塔「PHP 设置」→「服务」→ 点击「重载配置」+「重启」两个操作都做一次
- Redis 默认端口是
6379,但某些宝塔模板(尤其多站点部署)可能被改成了6380或其他值,wp-config.php里的WP_REDIS_PORT必须严格对应
wp-config.php 配置项写错一个字母就失效
官方文档常把配置项写成示例格式,但实际部署时,define() 顺序、引号类型、分号缺失都会导致解析失败,且无报错提示,只会静默降级回数据库查询。
-
WP_REDIS_HOST建议写死为'127.0.0.1',不要用'localhost'(PHP 会尝试走 socket,而宝塔默认不配 unix socket) -
WP_REDIS_PORT必须是整数,写成'6379'(字符串)会导致连接超时 - 如果 Redis 设置了密码,
WP_REDIS_PASSWORD必须开启且值完全匹配,注意密码中若含特殊字符(如$、/),需在宝塔 Redis 配置里用单引号包裹requirepass 'your$p@ss' - 别漏掉
WP_REDIS_TIMEOUT和WP_REDIS_READ_TIMEOUT,设为1可避免网络抖动时阻塞页面渲染
Redis Object Cache 插件启用后仍不缓存?检查这三处
即使连接状态显示 Connected,也可能只是握手成功,但对象缓存实际未介入请求生命周期。典型表现是 Query Monitor 显示 DB 查询数没下降、Redis CLI 查不到 key。
- 确认插件版本:必须用由
Rafael Bernardi维护的「Redis Object Cache」(插件 slug 是redis-object-cache),不是同名但代码陈旧的 fork 版 - 检查是否与其他缓存插件共存:W3 Total Cache、LiteSpeed Cache、WP Super Cache 等若同时启用「对象缓存」模块,会互相覆盖
wp_cache_*()函数,必须停用其对象缓存功能,只保留一个 - 验证缓存写入:在 WordPress 后台「设置」→「Redis」页面,点击
Flush Cache后刷新前台页面,再立刻执行redis-cli -p 6379 keys "wp_*",应能看到类似wp_:options:alloptions的 key 生成
最容易被忽略的是 PHP-FPM 子进程用户权限问题:宝塔默认用 www 用户运行 PHP,而 Redis 若配置了 unixsocketperm 但没放开 www 组读写权限,连接会静默失败。这种问题不会报错,只表现为缓存不生效——建议全程用 TCP(127.0.0.1:6379)而非 socket,避开权限纠缠。


















