XAMPP 本身不自带 Redis,需手动部署独立实例;其控制面板仅识别 Apache、MySQL 等内置服务,无法启动、管理 Redis,多端口运行须通过多个隔离配置的 redis-server.exe 进程实现。

XAMPP 本身不自带 Redis,所谓“配置多端口支持 Redis 连接”本质是:在 XAMPP 环境下手动部署 Redis 实例,并通过修改 redis.conf 启动多个监听不同端口的独立进程——XAMPP 的 Apache/MySQL 控制面板对 Redis 完全无感知,也不能管理它。
为什么不能直接用 XAMPP 控制面板启 Redis
XAMPP 的 xampp-control.exe(或 macOS/Linux 下的启动脚本)只识别内置服务:Apache、MySQL、FileZilla、Mercury、Tomcat。Redis 不在其服务列表中,也未提供 redis_start.bat 或对应注册逻辑。试图在面板里勾选“Redis”会失败,且不会报错——它根本不会尝试加载。
常见错误现象:
– 点击“Start”后 Redis 栏位无反应、状态始终灰色
– 查看 xampp\logs\xampp-error.log 无 Redis 相关记录
– 手动运行 redis-server.exe 却提示 bind: No error 或 Address already in use
- Redis 必须作为独立 Windows 服务或前台进程运行,与 XAMPP 解耦
- 若强行把
redis-server.exe放进xampp\redis\并改名,控制面板仍无法识别——它只查硬编码的服务名和注册表项 - 多端口不是靠 XAMPP 配置出来的,而是靠启动多个
redis-server.exe实例,每个加载不同的redis.conf
如何手动启动两个 Redis 实例(如 6379 和 6380)
核心动作是复制配置 + 指定端口 + 分离数据目录。Windows 下推荐使用 CMD 启动(避免服务注册复杂度),便于调试。
- 从 MicrosoftArchive/redis 下载
Redis-x64-*.zip(注意:官方 redis.io 不提供 Windows 原生版,微软已归档但仍是目前最稳定选择) - 解压到
xampp\redis6379\和xampp\redis6380\两个独立目录 - 分别编辑
redis6379\redis.conf:
– 修改port 6379
– 修改pidfile ./redis_6379.pid
– 修改dbfilename dump6379.rdb
– 修改dir ./data(确保该data子目录存在) - 同理,
redis6380\redis.conf中设port 6380、pidfile ./redis_6380.pid等,路径全部隔离 - 启动命令(管理员 CMD):
redis6379\redis-server.exe redis6379\redis.confredis6380\redis-server.exe redis6380\redis.conf
PHP 连接时指定端口的关键点
PHP 的 Redis 扩展(非 Predis)默认连 127.0.0.1:6379。要连其他端口,必须显式传参——漏掉端口参数就会连错实例,且无明确报错(可能静默超时或返回空)。
- 正确写法:
$redis = new Redis(); $redis->connect('127.0.0.1', 6380); - 若用
phpredis的connect()第三个参数是超时(秒),第四个才是保留字段,**不能跳过端口直接写超时**:
❌$redis->connect('127.0.0.1', 2);→ 实际连的是 6379,2 被当超时
✅$redis->connect('127.0.0.1', 6380, 2); - 检查是否连上:
var_dump($redis->ping());返回+PONG字符串即通;若报Connection refused,先确认对应端口的redis-server.exe是否正在运行(任务管理器查进程) - Apache 下 PHP 进程与 Redis 实例在同一台机器,用
127.0.0.1而非localhost(Windows 下后者可能走命名管道或 IPv6,引发延迟或失败)
端口冲突与防火墙的实际影响
6379 是 Redis 默认端口,常被其他软件(如 Docker Desktop、旧版 WAMP、甚至某些杀毒软件)抢占。XAMPP 自身不占 Redis 端口,但它启动的 MySQL/Apache 不影响 Redis——真正要盯的是系统级占用。
- 查端口占用:
netstat -ano | findstr :6380→ 记下 PID → 任务管理器找对应进程 - Windows 防火墙默认放行本地回环(
127.0.0.1),但若你改用192.168.x.x地址远程连接,则需手动添加入站规则,开放对应端口(6380) - 多个 Redis 实例共存时,务必关闭
redis.conf中的protected-mode yes(否则只允许本地回环连接,跨端口调用 PHP 仍可能失败) - 不要为省事让两个实例共用
dir或dbfilename—— RDB 文件会相互覆盖,数据丢失无声无息
真正的难点不在启动几个实例,而在于确保每个实例的配置文件、数据路径、PID 文件、日志路径四者完全隔离——少改一处,就可能一个实例覆盖另一个的持久化数据,或启动时因 PID 冲突静默退出。











