只装宝塔蓝色Memcached服务端无效,必须同时安装服务端和PHP的memcached扩展,并配置object-cache.php、session及验证命中率。

只装宝塔里那个蓝色 Memcached 服务端,动态请求根本不会变快——PHP 还没连上它,缓存链路就断在第一步。
必须同时装服务端 + PHP 的 memcached 扩展
宝塔「软件商店」里点安装的 Memcached(带蓝色 M 图标)只是后台守护进程,监听 127.0.0.1:11211,它不自动和 PHP 绑定。PHP 要用它,得额外装客户端扩展:
- 进「已安装」→ 找到你站点实际使用的 PHP 版本(比如
PHP-8.2)→ 「设置」→ 「安装扩展」→ 勾选memcached(注意不是memcache,后者不支持setOptions()和二进制协议,WordPress 官方对象缓存也不认) - 装完立刻点该 PHP 版本右上角的「重载配置」,否则
phpinfo()里搜不到memcached模块 - 打开
phpinfo()页面,搜索memcached,确认memcached support显示enabled,且版本号 ≥ 3.2.0(旧版有连接复用 bug)
session.save_handler = memcached 配置要点
把 PHP Session 存进 Memcached,能避免文件锁和磁盘 I/O,适合高并发登录/表单场景,但默认配置容易出问题:
- 在 PHP 设置 → 「配置修改」里,找到
session.save_handler行,改成memcached - 紧跟着改
session.save_path为127.0.0.1:11211(不能写localhost,某些 PHP 版本解析失败) - 必须加一行
memcached.sess_binary_protocol = 1,否则 session 反序列化可能乱码(尤其含中文或 emoji 时) - 别动
session.gc_maxlifetime,Memcached 默认 TTL 是 0(永不过期),但 PHP session 清理仍依赖这个值,建议设为1440(24 分钟)并确保服务端内存足够
WordPress 对象缓存需手动放 object-cache.php
WordPress 不会自动调用 Memcached,它只检查 wp-content/ 目录下是否存在 object-cache.php 文件:
立即学习“PHP免费学习笔记(深入)”;
- 下载官方兼容版
object-cache.php(来自 WordPress 官方推荐分支 或 wpjam 插件提取版) - 上传到
/wp-content/object-cache.php(注意:不是/wp-content/plugins/,放错位置等于没装) - 多站点必须在
wp-config.php顶部加define('WP_CACHE_KEY_SALT', 'your-site-unique-string');,否则不同子站缓存 key 冲突 - 验证是否生效:访问
/wp-admin/options-general.php?page=memcached(需装Memcached Is Your Friend插件),或直接运行wp cache flush后看返回是否成功
命中率低或连接超时的常见卡点
服务状态显示「运行中」≠ 缓存真在工作,很多故障藏在细节里:
-
Failed to connect to 127.0.0.1:11211:检查宝塔里Memcached服务是否真在运行(不是「已安装」就等于「已启动」),重启一次服务再试 -
Class 'Memcached' not found:90% 是 PHP-FPM 进程没重载,或站点用了错误的 PHP 版本(比如宝塔里给PHP-8.2装了扩展,但站点指定的是PHP-7.4) - 命中率长期
hit% :先确认 <code>object-cache.php是否被 WordPress 加载(wp_debug开启后首页源码里搜memcached字样),再检查插件如 WP Super Cache 是否禁用了对象缓存 - 缓存雪崩风险:不要在代码里裸写
$mem = new Memcached(); $mem->addServer(...),至少包一层if ($mem->getStats()) { /* use */ } else { /* fallback to db */ }
最难调的其实是 PHP 扩展和 Memcached 服务之间的协议协商——比如 memcached.sess_binary_protocol = 1 漏配,Session 看似存进去了,取出来却是空字符串,这种问题不会报错,只会静默失效。



















