Redis服务必须运行且状态为“运行中”,配置才生效;需检查端口、密码、安全组、PHP扩展版本、wp-config.php位置、超时设置、IP地址、多实例隔离及连接验证。

Redis 服务没运行,一切配置都是白搭
宝塔里点“安装 Redis”不等于它就在干活——很多人卡在这一步:装完没检查状态,直接去配 PHP 或 WordPress,结果连不上。必须进宝塔「服务」列表确认状态是「运行中」,不是「已安装」或「已停止」。
- 如果显示「启动失败」,先看日志:
/www/wwwlogs/redis.log,常见原因是端口6379被占用(比如之前手动跑过 Redis,或 Docker 占了) - 宝塔默认不设密码,但如果你在「Redis 管理」里开了密码,
WP_REDIS_PASSWORD就必须加,且不能留空字符串;空密码要删掉整行,不是写'' - 云服务器(阿里云/腾讯云)务必在安全组放行
6379端口,宝塔「安全」页面的防火墙规则只是系统层,云平台还有独立网络策略
PHP 扩展装错版本,WordPress 就会报 “Class 'Redis' not found”
WordPress 后台启用 Redis 插件时突然报错,八成是 PHP 扩展没装对。宝塔支持多个 PHP 版本共存,但你网站用的是 PHP 8.1,却给 PHP 7.4 装了 redis 扩展,完全无效。
- 进宝塔「网站」→ 点击你的站点 → 看右上角「PHP 版本」,记下确切版本号(如
8.1) - 去「软件商店」找到对应 PHP 的「设置」→「安装扩展」→ 勾选
redis(不是memcached,也不是igbinary) - 安装完必须点「重启 PHP 服务」,光刷新页面或重载 Nginx 没用
- 验证是否生效:在网站根目录建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问,搜索「redis」看有没有 Loaded 那一行
wp-config.php 配置写错位置或参数,连接永远超时
很多用户把 Redis 配置塞到 wp-config.php 最底下,或者插在 /* That's all, stop editing! */ 后面——这会导致常量未被识别,插件读不到连接信息。
- 必须放在
define('WP_DEBUG', false);下方、/* That's all, stop editing! */上方 WP_REDIS_TIMEOUT和WP_REDIS_READ_TIMEOUT建议设为1(秒),设太大(比如5)会让页面卡顿明显,尤其在 Redis 响应慢时- 本地部署一律用
127.0.0.1,别写localhost——PHP 的redis扩展会走 socket,localhost可能触发 IPv6 解析失败 - 如果改过 Redis 端口(比如改成
6380),除了改配置,还要确认宝塔「Redis 管理」里端口同步改了,否则服务实际还在听6379
多站点共用一个 Redis 实例,缓存互相污染
一台服务器跑 WordPress 博客 + 微擎后台 + 自研 API,全连同一个 127.0.0.1:6379,缓存键名没隔离,A 站点删缓存可能清掉 B 站点的数据,后台登录态莫名失效就是这个原因。
- 简单方案:每个站点用不同
database(如博客用DB 0,微擎用DB 1),但需插件/框架支持;WordPress 的Redis Object Cache默认不支持切库 - 靠谱方案:按站点开独立 Redis 实例,比如博客用
6380,微擎用6381,配置文件各自指向不同端口,进程、日志、数据目录完全分离 - 注意:复制配置文件后,必须改
pidfile和dir,否则多个实例会抢同一个 PID 文件,启动第二个就失败
最常被跳过的动作是验证连接状态——进了 WordPress 后台「设置」→「Redis」,看到 Status 显示 Connected 才算真正通了。没这行字,前面所有操作都得回头查。
Excellent breakdown. The wp-config.php placement instruction with exact location (below WP_DEBUG, above the stop editing comment) is perfect.
docker占用了6379端口导致Redis启动失败,这个问题我遇到过。docker ps看看哪个容器占了端口。
The tip about checking which PHP version the site actually uses is so basic yet frequently missed. One site on 7.4, another on 8.0.
多站点分离Redis实例确实是最稳妥的方案,用不同端口隔离数据,互相不干扰。
I appreciate the warning about not using empty string for password. WP_REDIS_PASSWORD with empty string causes connection errors.