⭐ 推荐:社区规则条款 V1.0

小皮面板如何安装和配置 memcached 扩展?

chinaz
chinaz 初级会员萌新站长
发布于 2026-10-15 15:08 ·0 浏览 ·3 回复
内容摘要

小皮面板安装 memcached 扩展需先装 memcached 服务端与 libmemcached 开发库,再为对应 PHP 版本编译安装 memcached.so,写入 php.ini 并重启验证;PHP 7/8 应选 memcache

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2114.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 3

juming
juming 初级会员萌新站长 1楼 2026-10-15 15:27

帖子正好断在 pecl 交互那一步,我把它补完:询问 Enable memcached SASL support? [no] 时一般直接回车选 no,除非你确实要在服务端配 SASL 认证;接着问 libmemcached directory [default] 也直接回车,让它用系统默认路径。编译完成后 pecl 会提示你手动加 extension=memcached.so,这一步别漏。

php.ini 要认准是面板里当前 PHP 版本的那份,通常在该版本的 etc 目录下(如 /www/server/php/74/etc/php.ini),路径以面板 PHP 设置页显示的为准。写完在面板点重启对应的 PHP-FPM,SSH 下的服务名各环境不一样,不确定就用面板按钮。不想用 pecl 的话,下载对应 PHP 版本的 memcached 源码,用该版本的 phpize 和 --with-php-config=/www/server/php/74/bin/php-config 编译安装,效果一样。

验证时注意 CLI 和 FPM 可能读不同的 ini:/www/server/php/74/bin/php -m | grep memcached 通过,只说明 CLI 加载了,最稳妥还是丢一个 phpinfo 页面看 FPM 里有没有 memcached 段。

常见的坑有两个:一是本地连不上,先确认改的是 127.0.0.1 而不是 localhost(后者可能走 IPv6 或 socket),再用 echo stats | nc 127.0.0.1 11211 确认服务端活着;二是千万别为了省事把 -l 改成 0.0.0.0 直接暴露到公网,11211 无认证被人刷成肉鸡的案例太多了,需要外网访问就加防火墙白名单。

lqyyzz
lqyyzz 观望站长 #1922 2楼 2026-10-15 15:40
juming:帖子正好断在 pecl 交互那一步,我把它补完:询问 `Enable memcached SASL support? [no]` 时一般直接回车选 no,除非你…

juming 这段补得挺完整,我就在他基础上补三个容易翻车的点,都是实测踩过的。

第一,版本匹配。PHP 8.2/8.3 必须用 memcached 3.2.x,PHP 8.0/8.1 用 3.1.5 以上,装老版本编译时会直接报头文件找不到(类似 php_smart_string.h 那类错误)。所以别裸跑 pecl install memcached,稳妥点写成 pecl install memcached-3.2.0,装完后悔可比重新编译轻松。

第二,extension_dir 和 ini 写入位置。pecl 编出来的 so 一般在 $(php-config --extension-dir) 下,如果面板某个 PHP 的 ini 里没配 extension_dir 或指向了别处,光写 extension=memcached.so 会静默加载失败——FPM 日志里不一定报,phpinfo 里就是没有。建议用绝对路径写 extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/memcached.so,最保险。

第三,既然服务端都装好了,顺手把 session 也接上会更值:在同一个 php.ini 里设 session.save_handler = memcached、session.save_path = "127.0.0.1:11211",多机共享登录态很省事。但注意 memcached 重启或内存淘汰会掉会话,登录态要求严格的站点别这么干。

另外补一句服务端侧:-m 内存和 -c 连接数默认分别是 64M 和 1024,站点并发一上来就得调,改 /etc/sysconfig/memcached(RHEL 系)或 /etc/memcached.conf(Debian 系)后重启服务,别等 OOM 了才回头查。

周末
周末 萌新站长 #1924 3楼 2026-10-15 15:52
lqyyzz:juming 这段补得挺完整,我就在他基础上补三个容易翻车的点,都是实测踩过的。 第一,版本匹配。PHP 8.2/8.3 必须用 memcached 3.2.…

你这三点基本把常见坑覆盖了,我在编译交互和验证这两块再补几个细节,都是装残废版本后回头查才发现的地方。

pecl install memcached 交互过程中会连问几个问题,答错就直接装出个半残版本:libmemcached directory 默认是 no,如果你是用源码编译的 libmemcached,这里必须填绝对路径;Enable memcached SASL support? 只有走 SASL 认证的集群才填 yes,普通本地缓存填 no;Enable memcached session support? 要用 session 就填 yes。装完用 php --ri memcached 看一眼,Memcached Support、Session Support、SASL Support 三行是不是都 enabled,比 php -m 信息全得多,还能顺带看到编进去的 libmemcached 版本号。

验证这块提醒一下:php -m 走的是 CLI 的 ini,小皮面板里 CLI 和 FPM 未必读同一个文件,所以最稳的还是丢个 <?php phpinfo(); 页面看 FPM 那份实际加载路径,或者 php-fpm -i | grep "Loaded Configuration" 对一下。

session 那条我再补一个纠正:memcached 扩展的前缀其实可配,memcached.sess_prefix 默认是 memc.sess.key.。同一个实例上跑多个站时给每个站写不同的前缀,就能避免 session id 撞车串号,比拆多个实例省事。至于存 session 掉登录态,本质是 memcached 的 LRU 淘汰,跟重启一样无解,能接受再上。