Memcached 在宝塔需手动安装服务端与 PHP 扩展:先用 yum/apt 安装 memcached 服务并开启 11211 端口,再在宝塔中安装 PHP 的 memcached(非 memcache)扩展并重载配置,连接时用 new Memcached(),键名须合法、TTL 合理,通过命令行监控命中率与内存使用。

Memcached 在宝塔里装不起来?先看端口和依赖
宝塔面板默认不自带 Memcached,得手动装扩展 + 服务端。很多人卡在第一步,执行 memcached -v 报错“command not found”,本质是没装服务端二进制,光装了 PHP 扩展没用。
- 宝塔 8.0+ 的软件商店里搜 “Memcached” 只会显示 PHP 扩展,不是服务端,点了安装只是给 PHP 加了个
memcached.so - 真正的服务端要走命令行:
yum install memcached(CentOS)或apt install memcached(Ubuntu/Debian) - 装完检查是否监听:
netstat -tuln | grep :11211,没输出说明服务根本没启 - 常见坑:防火墙(
firewall-cmd --permanent --add-port=11211/tcp)、SELinux(临时关掉试试:setenforce 0)
PHP 连不上 Memcached?检查扩展版本和连接方式
装完服务端,PHP 还是 new Memcached() 报类不存在,大概率是扩展没启用或版本不匹配。
- 宝塔 PHP 设置 → “安装扩展” → 找到
memcached(注意不是memcache),勾选安装——这是 PHP 7.4+ 推荐的扩展,旧版memcache已淘汰 - 装完务必点“重载配置”,否则
phpinfo()里看不到 - 连接时别写错类名:
$m = new Memcached();,不是Memcache(少个 d) - 默认连接本地 11211 端口,如果改过配置,初始化要显式加:
$m = new Memcached(); $m->addServer('127.0.0.1', 11211); - WordPress 或 Laravel 项目里,确认缓存驱动已切到
memcached,不是file或redis
缓存没生效?查日志、看键名、防序列化陷阱
网站速度没变快,甚至更慢,常见原因是缓存压根没写进去,或者写进去但没读出来。
- 先看 Memcached 日志:
tail -f /var/log/memcached.log(没日志就去/etc/sysconfig/memcached开OPTIONS="-vv"再重启) - 键名不能含空格、换行、控制字符,WordPress 插件生成的键如
wp_:posts:123:zhCN没问题,但自己拼的"user{$id}_"如果$id是 null 或数组,会触发 PHP 自动序列化,Memcached 不认这种值(报SERVER_ERROR bad data chunk) - 存数组/对象必须手动
serialize()+unserialize(),但更推荐只存字符串或 JSON:$m->set($key, json_encode($data)) - TTL 设太短(比如 10 秒)等于没缓存,WordPress 建议设 3600(1 小时),静态内容可设 86400(1 天)
宝塔后台能监控 Memcached 吗?靠命令和简单脚本
宝塔没内置 Memcached 实时监控页,想看命中率、内存使用,得自己查。
- 最简命令:
echo "stats" | nc 127.0.0.1 11211 | grep -E "(curr_items|bytes|cmd_get|get_hits)" - 关键指标:
get_hits / cmd_get—— 命中率,低于 0.8 就说明缓存设计有问题bytes / limit_maxbytes—— 内存使用率,超 90% 要调大-m参数 - 修改内存限制:编辑
/etc/sysconfig/memcached,改CACHESIZE="512"(单位 MB),再systemctl restart memcached - 注意:宝塔重启 PHP 不影响 Memcached 服务,但改了 PHP 扩展配置后,必须重载 PHP,否则新设置不生效
缓存逻辑本身不难,难的是每层都得对得上——服务端开着、PHP 扩展加载了、连接参数写对了、键名合法、TTL 合理、监控能看见。漏一环,就白忙活。










