Memcached 高性能分布式内存缓存,PHP 需安装 php_memcache.dll(旧)或 php_memcached.dll(新,基于 libmemcached)扩展。本文针对 Windows,详细说明服务端部署、客户端扩展选型、版本匹配、验证测试全流程。
| 扩展名 | 库名 | 特性 | 推荐度 |
|---|---|---|---|
| memcache | PECL memcache | 纯 PHP 实现协议,功能基础,无 SASL、无二进制协议 | ⭐⭐ (维护模式) |
| memcached | PECL memcached (libmemcached) | C 库封装,支持 SASL、二进制协议、一致性哈希、CAS、多键获取 | ⭐⭐⭐⭐⭐ (现代标准) |
强烈建议使用 memcached 扩展,本文以此为例。
https://github.com/memcached/memcached/wiki 或 https://nssm.cc/download (作为服务运行)。memcached.exe,测试运行:memcached.exe -p 11211 -m 64 -c 1024 (端口11211、内存64MB、最大连接1024)。nssm):nssm install Memcached "C:\memcached\memcached.exe" "-p 11211 -m 256"nssm start Memcachedphp -i | find "Thread Safety" (TS/NTS)php -i | find "Architecture" (x86/x64)php -v (版本如 7.4、8.1、8.2)https://pecl.php.net/package/memcached → 选择版本 → DLL 链接。https://windows.php.net/downloads/pecl/releases/memcached/php_memcached-3.2.0-8.1-ts-vs16-x64.dll → 重命名为 php_memcached.dll。ext/php_memcached.dll。libmemcached.dll、libsasl.dll、liblz4.dll、libzstd.dll 等必须放在 PHP 根目录 或 System32 或 PATH 目录 下。通常 PECL 包会附带,一并复制。php.ini(php --ini 确认路径):extension_dir = "ext" extension=memcached ; 可选调优 memcached.sess_binary_protocol = On memcached.sess_consistent_hash = On
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$m->set('test_key', 'Hello Memcached!', 60);
$val = $m->get('test_key');
var_dump($val); // string(18) "Hello Memcached!"
// 多键获取
$m->setMulti(['a'=>1, 'b'=>2, 'c'=>3]);
print_r($m->getMulti(['a','b','c']));
// CAS 乐观锁
$m->set('counter', 0);
$cas = $m->get('counter', null, $casToken);
$m->cas($casToken, 'counter', $cas + 1);
echo "CAS success\n";
?>
输出无报错、值正确即安装成功。
| PHP版本 | TS/NTS | 架构 | memcached扩展版本 | 依赖libmemcached版本 |
|---|---|---|---|---|
| 7.4 | TS | x64 | 3.1.5 | 1.0.18 |
| 8.0 | TS | x64 | 3.2.0 | 1.0.18 |
| 8.1 | TS | x64 | 3.2.0 | 1.0.18 |
| 8.2 | TS | x64 | 3.2.0 | 1.0.18 |
严格匹配 TS/NTS、x86/x64、PHP版本,否则Unable to load dynamic library。
| 错误 | 原因 | 解决 |
|---|---|---|
| Unable to load dynamic library 'memcached' | DLL版本不匹配/缺少依赖DLL | 核对TS/NTS/x64;确保libmemcached.dll等在PATH |
| Class 'Memcached' not found | 扩展未加载/拼写错误 | phpinfo()搜memcached;extension=memcached(无php_前缀) |
| Could not connect to server | 服务未启动/端口占用/防火墙 | netstat -ano\|findstr 11211;telnet 127.0.0.1 11211 |
| SASL authentication failed | 服务端未启用SASL/账号密码错 | memcached -S 启用SASL;配置sasl_passwd.conf |
addServer,启用 consistent_hash。-m,监控 stats 命中率、驱逐数、内存使用率。业务模块:实体类型:ID:属性 (如 order:info:10086:detail)。igbinary (需安装扩展) 或 msgpack,比默认 PHP 序列化快且体积小。