phpenv不内置redis主从或集群管理,需手动部署多实例:改端口、data目录及配置replicaof;集群还需官方redis 6.2+、6节点、redis-cli --cluster创建,并用rediscluster类连接。

phpEnv 本身不内置 Redis 集群或主从复制管理能力,它只是 Windows 下的 PHP 运行环境集成包(类似 XAMPP),默认只带单实例 Redis 服务。想在 phpEnv 中跑 Redis 集群或主从,必须手动部署多个 Redis 实例并配置通信——这不是“开个开关”就能用的功能。
phpEnv 里启动多个 Redis 实例要改 port 和 data 目录
phpEnv 自带的 Redis 默认监听 6379,路径在 phpenv\redis\。要模拟主从,至少得再起一个实例(比如从节点用 6380):
- 复制一份
redis.conf到新目录,比如phpenv\redis-slave\ - 修改新配置:
port 6380、pidfile redis_6380.pid、dir ./redis-slave/、dbfilename dump-6380.rdb - 关键一步:加上
replicaof 127.0.0.1 6379(注意 6.x+ 推荐用replicaof,不是旧版slaveof) - 如果主节点设置了密码,必须加
masterauth your_password - 用
redis-server redis-slave.conf单独启动从节点(不要依赖 phpEnv 的服务管理)
Redis 集群无法直接用 phpEnv 自带 Redis 启动
phpEnv 自带的 Redis 是单机版(redis-server.exe),不支持 --cluster 模式。要跑 Redis Cluster,你得:
- 下载官方 Redis for Windows 的 6.2+ 版本(微软已停止维护旧版,推荐用 MicrosoftArchive/redis 或更稳妥的 tporadowski/redis)
- 准备至少 6 个实例(3 主 3 从),每个实例配独立
port、cluster-enabled yes、cluster-config-file nodes-xxx.conf、cluster-node-timeout 5000 - 用
redis-cli --cluster create命令初始化集群,不能靠 phpEnv 图形界面点出来 - PHP 侧必须用
RedisCluster类连接,且 phpredis 扩展版本 ≥ 5.3.0(phpEnv 自带的可能是 4.x,不支持集群)
PHP 连接本地主从时,replicaof 必须在 connect 后调用
很多人写错顺序,导致从节点没真正挂上去:
$redis = new Redis();
$redis->connect('127.0.0.1', 6380); // 先连从节点
$redis->replicaof('127.0.0.1', 6379); // 再指定主节点
// ✅ 正确:connect 完再 replicaof
$redis->replicaof('127.0.0.1', 6379);
$redis->connect('127.0.0.1', 6380); // ❌ 错误:replicaof 在 connect 前无效
验证是否生效,连上从节点后执行:
$info = $redis->info('replication');
var_dump($info['role'], $info['master_host'], $info['master_port']);
// 应输出 'slave', '127.0.0.1', '6379'
如果 role 还是 master,说明 replicaof 没生效——大概率是顺序错了,或主节点拒绝了连接(检查 bind、protected-mode no、密码)。
Laravel 项目里别直接写 REDIS_HOST=127.0.0.1 就完事
在 phpEnv 环境下跑 Laravel + Redis 主从/集群,.env 和 config/database.php 得配合改:
- 主从场景:Laravel 本身不自动读写分离,
cache和session默认都走default连接;如需读从节点,得自己封装RedisReadClient并注入到CacheManager - 集群场景:必须禁用
redis.default,改用redis.clusters,且config/cache.php中'connection' => 'cache'要指向集群配置名(不是default) - phpEnv 的 PATH 通常不含 redis-cli,
php artisan tinker里执行Redis::connection()->info()是唯一快速验证方式
最常被忽略的一点:phpEnv 的 PHP 是线程安全(TS)版本,而部分 phpredis 编译包是 NTS 的,扩展加载会静默失败——检查 php -m | findstr redis 是否真列出了 redis,别只看 phpinfo 页面。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











