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

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

在 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。