PHP Memcache 缓存基础用法与数据库查询优化

Ada
Ada
发布时间:2026-10-16 | 4人浏览过
原创

在 PHP 开发中,Memcache 是缓解数据库压力的常用工具。本文详细解析 Memcache 的四个核心 API(add、get、replace、delete),并提供基于 MySQL 查询结果的缓存实现方案,帮助开发者快速掌握数据缓存的最佳实践。

Memcache 核心操作接口

PHP 的 Memcache 扩展提供了几个基础方法来管理服务器中的键值对。理解这些方法的用途和参数是正确使用缓存的前提。

第1步:写入新数据 (add)

add() 方法用于向 Memcache 中添加新的键值对。如果该 $key 已经存在,操作将失败返回 false,这保证了不会意外覆盖已有数据。

  • 参数说明:
    • $key: 唯一标识符,字符串类型。
    • $value: 要存储的数据,可以是字符串、数组或对象。
    • $expiry: 过期时间(秒)。默认为 0,表示永久有效;也可设置为具体秒数,或 Unix 时间戳。
  • 完成状态:成功插入后返回 true,若 key 已存在则返回 false。

第2步:获取数据 (get)

get() 方法根据给定的键名从缓存中检索数据。这是读取缓存最常用的方式。

  • 参数说明:
    • $key: 之前存入数据时使用的唯一标识。
  • 完成状态:若存在则返回对应的数据(保持原数据类型);若不存在或已过期,则返回 false。

第3步:替换现有数据 (replace)

replace() 方法用于更新已存在的键值对。与 add() 不同,如果指定 key 不存在,replace() 会失败。

  • 参数说明:同 add() 方法。$key、$value、$expiry。
  • 适用场景:适用于已知数据需要更新,但不希望触发创建新记录逻辑的场景。

第4步:删除数据 (delete)

delete() 方法从 Memcache 中移除指定的键值对。

  • 参数说明:
    • $key: 要删除的数据标识。
    • $delay: 延迟删除时间(可选)。默认 0 立即删除。
  • 完成状态:成功删除返回 true。

实战:缓存 MySQL 查询结果集

在实际 Web 应用中,最常见的场景是将频繁查询且变动不多的 SQL 结果集缓存起来。以下示例展示了如何结合 MySQL 和 Memcache 构建一个简单的读写分离缓存逻辑。

第1步:初始化连接

首先建立与 Memcache 服务器的连接,并确保本地已安装并启用 Memcache 扩展。

<?php
$m = new Memcache();
$m->connect('localhost', 11211);
?>

第2步:构建缓存读取流程

在使用 SQL 查询前,先尝试从 Memcache 获取数据。利用 SQL 语句的 MD5 哈希值作为 Key,确保同一查询对应同一个缓存键。

完整代码示例

复制代码 代码如下:
<?php
// 1. 连接 Memcache
$m = new Memcache();
$m->connect('localhost', 11211);

// 2. 定义查询语句
$sql = 'SELECT * FROM users';
$key = md5($sql); // 使用 SQL 的哈希值作为唯一标识

// 3. 尝试从缓存获取
$rows = $m->get($key);

// 4. 如果缓存为空,执行数据库查询并写入缓存
if (!$rows) {
    // 注意:此处仅示意连接,实际请自行建立 DB 连接
    // mysql_query 为旧版函数,生产环境建议使用 PDO 或 mysqli
    $res = mysql_query($sql);
    $rows = array();
    while ($row = mysql_fetch_array($res)) {
        $rows[] = $row;
    }
    
    // 将结果集存入缓存,设置过期时间(例如 3600 秒)
    $m->add($key, $rows, 0, 3600);
}

// 5. 输出最终数据
var_dump($rows);
?>

执行逻辑解析

  1. 首次访问:缓存中无数据,get() 返回 false。程序执行 SQL 查询,获取结果集并通过 add() 存入 Memcache。
  2. 后续访问:缓存命中,get() 直接返回内存中的数据,跳过数据库 I/O 操作,显著降低负载。
  3. 失效处理:当设置的过期时间到达后,缓存自动清除,下次请求将重新同步数据库最新状态。

以上就是 PHP 中使用 Memcache 进行数据缓存的详细技巧与实例,更多关于 PHP 性能优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表