首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Windows PHP 环境安装配置 Memcached 扩展完整指南

     編輯:PHP 相關知識

Windows PHP 环境安装配置 Memcached 扩展完整指南

Memcached 高性能分布式内存缓存,PHP 需安装 php_memcache.dll(旧)或 php_memcached.dll(新,基于 libmemcached)扩展。本文针对 Windows,详细说明服务端部署、客户端扩展选型、版本匹配、验证测试全流程。

1. 明确两个扩展的区别

扩展名库名特性推荐度
memcachePECL memcache纯 PHP 实现协议,功能基础,无 SASL、无二进制协议⭐⭐ (维护模式)
memcachedPECL memcached (libmemcached)C 库封装,支持 SASL、二进制协议、一致性哈希、CAS、多键获取⭐⭐⭐⭐⭐ (现代标准)

强烈建议使用 memcached 扩展,本文以此为例。

2. 部署 Memcached 服务端

  1. 下载 Windows 版 Memcached:
    https://github.com/memcached/memcached/wiki 或 https://nssm.cc/download (作为服务运行)。
  2. 解压得到 memcached.exe,测试运行:
    memcached.exe -p 11211 -m 64 -c 1024 (端口11211、内存64MB、最大连接1024)。
  3. 注册为系统服务(推荐用 nssm):
    nssm install Memcached "C:\memcached\memcached.exe" "-p 11211 -m 256"
    nssm start Memcached

3. 安装 PHP memcached 扩展

  1. 确认 PHP 环境信息:
    php -i | find "Thread Safety" (TS/NTS)
    php -i | find "Architecture" (x86/x64)
    php -v (版本如 7.4、8.1、8.2)
  2. 下载对应 DLL:
    官方:https://pecl.php.net/package/memcached → 选择版本 → DLL 链接。
    或第三方预编译:https://windows.php.net/downloads/pecl/releases/memcached/
  3. 文件命名示例:php_memcached-3.2.0-8.1-ts-vs16-x64.dll → 重命名为 php_memcached.dll。
  4. 复制到 PHP 扩展目录:ext/php_memcached.dll。
  5. 关键依赖:libmemcached.dll、libsasl.dll、liblz4.dll、libzstd.dll 等必须放在 PHP 根目录 或 System32 或 PATH 目录 下。通常 PECL 包会附带,一并复制。
  6. 编辑 php.ini(php --ini 确认路径):
extension_dir = "ext"
extension=memcached
; 可选调优
memcached.sess_binary_protocol = On
memcached.sess_consistent_hash = On
  1. 重启 Web 服务器 / PHP-FPM。

4. 验证测试

<?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";
?>

输出无报错、值正确即安装成功。

5. 版本匹配对照表(示例)

PHP版本TS/NTS架构memcached扩展版本依赖libmemcached版本
7.4TSx643.1.51.0.18
8.0TSx643.2.01.0.18
8.1TSx643.2.01.0.18
8.2TSx643.2.01.0.18

严格匹配 TS/NTS、x86/x64、PHP版本,否则Unable to load dynamic library。

6. 常见报错排查

错误原因解决
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

7. 生产环境最佳实践

  • 至少 2 台 Memcached 节点,PHP 客户端配置多 addServer,启用 consistent_hash。
  • 设置合理内存 -m,监控 stats 命中率、驱逐数、内存使用率。
  • Key 命名规范:业务模块:实体类型:ID:属性 (如 order:info:10086:detail)。
  • 序列化:默认 igbinary (需安装扩展) 或 msgpack,比默认 PHP 序列化快且体积小。
  • 缓存穿透/击穿/雪崩防御:空值缓存、互斥锁重建、随机过期时间。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved