PHP 连接 Memcached 缓存服务完整指南
Memcached 是一种高性能的分布式内存对象缓存系统,广泛用于减轻数据库负载。在 PHP 中,通过安装 memcache 扩展并调用相应 API,可以高效地存储和读取各种类型的数据。
准备工作与安装配置
第1步:获取扩展文件
首先需要下载对应 PHP 版本的 php_memcache.dll 文件。确保版本号与你的 PHP 运行环境(如 PHP 7.x/8.x 及线程安全版本)匹配,以免出现加载错误。
第2步:修改 php.ini 配置
将下载好的 php_memcache.dll 放入 PHP 的扩展目录(通常位于 ext/ 文件夹下)。然后打开 php.ini 配置文件,添加以下行以启用该扩展:
extension=php_memcache.dll
保存后重启 Web 服务器(如 Apache 或 Nginx + PHP-FPM),使配置生效。
第3步:验证安装
创建一个新的 PHP 文件,使用 phpinfo() 函数查看输出页面。如果看到名为 “memcache” 的部分,说明扩展已成功加载。
PHP 操作 Memcached 核心代码示例
以下代码展示了完整的生命周期操作,包括连接、添加不同类型的值、查询、替换和删除。
<?php
// 1. 创建 Memcache 对象实例
$mem = new Memcache;
// 2. 连接到 Memcached 服务
// 参数分别为:服务器IP地址,端口号(默认11211)
if (!$mem->connect('10.18.110.213', 11211)) {
die('连接 Memcached 失败!');
}
// ==========================================
// 3. 添加数据 (Set Operation)
// ==========================================
// A. 添加数组示例
$arr = array("beijing", "tianjin");
// 参数: key, value, 标志(MEMCACHE_COMPRESSED为压缩), 有效期(秒)
if ($mem->set('key1', $arr, MEMCACHE_COMPRESSED, time() + 86400)) {
echo '数组添加成功';
} else {
echo '添加失败';
}
// B. 其他数据类型说明
// - 字符串/整数:直接传递即可
// - 对象:需实现 __sleep/__wakeup 或使用 json_encode 序列化
// - 布尔/Null:支持,但需注意业务逻辑中对 false 的处理
// ==========================================
// 4. 查询数据 (Get Operation)
// ==========================================
$val = $mem->get('key1');
var_dump($val); // 输出之前存入的数组
// ==========================================
// 5. 替换数据 (Replace Operation)
// ==========================================
// replace 仅在键已存在时执行;若键不存在则返回 false
if ($mem->replace('key1', 'updated_value', MEMCACHE_COMPRESSED, 60)) {
echo '替换成功';
} else {
echo '替换失败(可能键不存在)';
}
// ==========================================
// 6. 删除数据 (Delete Operation)
// ==========================================
if ($mem->delete('key14')) {
echo 'key14 已删除';
} else {
echo 'key14 不存在或删除失败';
}
?
关键注意事项
- 序列化:Memcached 本身不处理复杂对象的序列化。对于数组、对象等复杂结构,建议直接使用
serialize()和unserialize(),或者使用 JSON 格式(json_encode/json_decode)以保证兼容性。 - 过期时间:第三个参数通常为标志位,第四个参数为有效期。可以传入绝对时间戳或相对秒数。
- 资源类型:如数据库连接资源(resource),无法直接存入 Memcached,必须先关闭连接或转换为具体数据再存储。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













