PHP配置Redis需安装服务器、启用PHP扩展并连接操作。先安装Redis服务并确认运行,再通过PECL安装PHP Redis扩展并修改php.ini启用,最后用PHP代码测试连接。

phpEnv 本身不控制 Redis 的 lazyfree 配置
phpEnv 是一个 Windows 下的 PHP 集成环境(类似 XAMPP),它默认自带的 Redis 是精简版或预编译二进制,redis.conf 文件往往被隐藏、未启用,或压根没加载。你改了配置文件但 Redis 没读取,就等于白配。
关键点在于:lazyfree 是 Redis 服务端行为,和 phpEnv、PHP 扩展(如 phpredis)完全无关。PHP 层面调用 DEL 或 UNLINK 不会影响内存淘汰时的释放方式。
确认你用的 Redis 版本 ≥ 6.0
phpEnv 自带的 Redis 多为 3.x / 4.x / 5.x 旧版本,这些版本根本不支持 lazyfree-lazy-eviction。必须手动升级:
- 去 GitHub Microsoft Archive Redis 下载
Redis-x64-6.2.6.msi或更高版本(注意:官方 Redis 已停止 Windows 支持,此为最后稳定分支) - 卸载 phpEnv 内置 Redis 服务(通常叫
Redis或phpenv-redis) - 用新 MSI 安装,并勾选「Install Redis as a service」,安装路径建议设为
C:\Redis - 安装后检查:
redis-server --version输出应为Redis server v=6.2.6或更高
修改 redis.conf 并启用 lazyfree-lazy-eviction
新版 Redis 安装后,配置文件默认在 C:\Redis\redis.windows.conf。用记事本打开,找到并取消注释(或新增)这一行:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
立即学习“PHP免费学习笔记(深入)”;
lazyfree-lazy-eviction yes
⚠️ 注意以下常见错误:
- 写成
lazyfree-eviction yes(漏掉-lazy-)→ Redis 启动时静默忽略,CONFIG GET lazyfree-lazy-eviction返回空 - 写在
# GENERAL区块外、或被其他注释符##挡住 → 配置不生效 - 改完没重启服务:以管理员身份运行命令提示符,执行
net stop Redis && net start Redis - 没验证是否加载:连上 Redis 执行
CONFIG GET lazyfree-lazy-eviction,返回1) "lazyfree-lazy-eviction" 2) "yes"才算成功
验证淘汰场景是否真走异步释放
光配对不行,得看实际淘汰时主线程是否还卡:
- 设置
maxmemory 100mb和maxmemory-policy allkeys-lru,然后塞入大量数据触发淘汰 - 观察
INFO MEMORY中的lazyfree_pending_objects:淘汰发生时该值应短暂上升(比如从 0 → 23 → 0),说明 BIO 线程正在处理 - 用
redis-cli --stat监控期间instantaneous_ops_per_sec是否持续稳定(不出现归零或断崖下跌) - 淘汰高峰时执行
redis-cli SLOWLOG GET 1,如果evictKeysRandom或evictLruKeys出现在慢日志里,说明配置没生效
真正容易被忽略的是:即使开了 lazyfree-lazy-eviction,被淘汰 key 的内存也不会立刻归还 OS;BIO 线程释放有延迟,used_memory 可能维持高位几秒——这不是失败,是设计如此。


















