memcached 扩展未安装或配置错误是 php 调用失败的主因;需确认 php-memcached 已启用、igbinary 序列化兼容、键名安全哈希、过期时间设为≤2592000秒,并通过 getversion() 等方式主动检测连接。
Memcached 扩展没装好,new Memcached() 直接报错
PHP 调用 Memcached 前必须确认扩展已启用。常见错误是只装了服务端 memcached(Linux 下 systemctl start memcached),却漏掉 PHP 的 memcached 扩展(非 memcache!两者不兼容)。运行 php -m | grep memcached,无输出就说明没装。Debian/Ubuntu 下执行:sudo apt install php-memcached,然后重启 Web 服务(如 sudo systemctl restart apache2 或 php-fpm)。Windows 用户需检查 php.ini 是否启用了 extension=php_memcached.dll,且 DLL 文件在 ext/ 目录下。
$mc->set() 返回 false,但没报错?查连接和序列化
Memcached 默认使用 igbinary 序列化(比原生 serialize 快且紧凑),但若未安装 igbinary 扩展,set() 可能静默失败。先运行 php -i | grep igbinary 确认;若无,要么装 igbinary,要么显式禁用:$mc->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_PHP)。另外,set() 失败大概率是连接问题:检查 $mc->addServer('127.0.0.1', 11211) 后是否调用 $mc->isConnected()(注意:该方法仅 PHP 8.0+ 支持),更稳妥的是执行一次 $mc->getVersion() 并捕获返回值是否为数组。
缓存键设计不当,导致击穿或冲突
直接用用户 ID 当键名(如 'user_123')看似简单,但实际容易出问题: