PHP Memcache 扩展安装与实战应用指南
本文详细介绍如何在 PHP 环境中正确安装与配置 Memcache 扩展,并通过从基础数据类型操作到 MySQL 查询结果缓存的综合示例,帮助开发者理解其工作原理及在实际项目中降低数据库压力的具体方法。
Memcache 环境准备与安装
要在 PHP 中使用 Memcache,首先需要确保服务器端已安装 Memcached 服务,并在 PHP 侧加载对应的扩展模块。以 Windows 环境为例,典型的依赖环境包括:PHP 5.3.3、Apache 2.2.7 和 MySQL 5.5.8(注:现代环境通常使用更高版本,但核心原理一致)。
1. 启动本地 Memcached 服务:
- 解压 Memcached 服务端文档,得到
memcached.exe。 - 打开命令提示符(CMD),切换到该目录,执行以下命令安装并后台运行服务:
memcached.exe -d install
2. 配置 PHP 扩展:
- 下载并解压对应 PHP 版本的 Memcache DLL 扩展包(如
php_memcache.dll)。 - 将
php_memcache.dll复制至 PHP 安装目录下的ext文件夹中。 - 编辑 PHP 配置文件
php.ini,添加或启用以下行:extension=php_memcache.dll - 重启 Web 服务器后,可通过运行
phpinfo()页面查看是否已成功引用memcache扩展模块。
Memcache 基础操作验证
安装完成后,建议编写一段测试代码验证连接的连通性以及基本的数据读写功能。以下代码演示了如何建立连接、保存简单字符串、处理数组、以及执行更新和删除操作。
<?php
// 1. 创建实例并连接服务端
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
// 2. 保存数据 (键, 值, 标志位, 过期时间秒)
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
// 3. 替换数据 (仅当键存在时成功)
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
// 4. 保存并获取数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
// 5. 删除指定键
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value after delete: " . $val . "<br />";
// 6. 清除所有缓存数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value after flush: ";
print_r($val2);
echo "<br />";
// 7. 关闭连接
$mem->close();
?>
数据库查询缓存实战:新闻系统案例
Memcache 最经典的应用场景是对频繁读取但修改较少的数据库查询结果进行缓存,从而减少直接访问 MySQL 的次数。以下示例模拟了一个新闻列表系统的缓存逻辑。
<?php
// === Memcache 连接配置 ===
$memcachehost = '127.0.0.1';
$memcacheport = 11211;
$memcachelife = 60; // 缓存有效期(秒)
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
// === 业务逻辑:新闻数据查询 ===
// 定义 SQL 语句
$sql = "SELECT id,title,left(title,16) as biaoti,date_time FROM `p_newsbase` where shenhe='1' order by id DESC limit 7";
// 使用 SQL 的 MD5 值作为唯一的 Cache Key,确保内容变动即失效
$key = md5($sql);
// 检查缓存是否存在
if(!$memcache->get($key)){
echo "Cache miss, querying DB...";
// 无缓存,则查询数据库
$conn = mysql_connect("192.168.30.1","root","passwd");
mysql_select_db("users");
$result = mysql_query($sql);
// 将结果集转化为数组
while ($row = mysql_fetch_assoc($result)) {
$news_arr[] = $row;
}
// 存入缓存 (注意:Memcache 只能存标量,需序列化)。
// 此处标识来源为 'db'
$f = 'db';
$memcache->add($key, serialize($news_arr), 0, $memcachelife);
$data = $news_arr;
} else {
echo "Cache hit, reading from Mem...";
// 有缓存,直接从内存读取
$f = 'mem';
$data_mem = $memcache->get($key);
// 反序列化还原数据
$data = unserialize($data_mem);
}
// 渲染/输出数据
foreach($data as $a){
echo $a['user_id'] . "_" . $a['email'] . "<br>";
}
?>
核心要点与注意事项
- Key 的设计: 在基于 SQL 查询做缓存时,必须对查询语句进行哈希处理(如
md5)生成唯一 Key。一旦 SQL 中的参数或条件发生变化,生成的 Key 也会不同,从而实现自动“过期”效果。 - 数据序列化: Memcache 底层存储限制决定了它主要支持字符串类型。对于数组、对象等复杂结构,务必使用
serialize()进行序列化后再存储,读取时使用unserialize()还原。 - 连接错误排查: 如果连接失败(
Could not connect),请检查 Memcached 服务是否在监听默认的 11211 端口,以及防火墙是否放行。
以上就是 PHP 中 Memcache 安装配置及应用技巧的详细内容,更多关于 PHP 性能优化与缓存技术的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









