引言:为什么缓存是快速 PHP 应用的基础
每位 PHP 开发者迟早都会遇到性能问题。当数据库开始变慢,页面加载需要 3-5 秒时,首先想到的就是缓存。这不仅仅是“把数据存到某处”,而是一整套优化哲学。
在本文中,我们将全面介绍 PHP 中所有流行的缓存方法:从简单的文件缓存到基于 Redis 和 Memcached 的工业级解决方案。您将学习如何选择合适的工具并避免常见错误。开始吧!
1. PHP 内置缓存机制
1.1. 操作码缓存:OPcache
在讨论外部存储之前,值得记住的是 PHP 本身就能缓存其代码。OPcache 机制将编译后的脚本保存在内存中,使 PHP 无需每次都解析和编译文件。
在 php.ini 中启用 OPcache:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2这是第一道防线。没有 OPcache,任何其他缓存的效果都会大打折扣。
1.2. APCu — 内存中的用户缓存
APCu(Alternative PHP Cache)是一个扩展,用于在 PHP 进程的共享内存中存储任意数据。非常适合不需要分布式缓存的小型项目。
APCu 使用示例:
<?php// 将数据保存 5 分钟apcu_store('my_key', ['data' => 'value'], 300);
// 读取数据$data = apcu_fetch('my_key');if ($data === false) { echo "缓存未找到,重新生成";}
// 删除键apcu_delete('my_key');?>优点:速度极快,简单易用。缺点:数据仅存在于单个服务器内。
2. Memcached:简单与速度
2.1. 什么是 Memcached 及其用途
Memcached 是一个分布式内存缓存系统。它通过减轻数据库负载来加速动态 Web 应用。与 APCu 不同,Memcached 作为独立服务器运行,可以从不同的 PHP 实例连接。
2.2. 安装和连接 Memcached
首先安装 Memcached 服务器:
sudo apt install memcachedsudo systemctl start memcached然后安装 PHP 扩展:
sudo pecl install memcached现在可以操作缓存了:
<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);
// 保存 10 分钟$memcached->set('user_123', ['name' => '伊万', 'email' => 'ivan@example.com'], 600);
// 读取$user = $memcached->get('user_123');if ($user === false) { // 从数据库加载}?>2.3. 何时选择 Memcached
- 当需要简单的 key-value 存储时
- 当数据生命周期较短时(会话、临时数据)
- 当不需要持久化时(Memcached 不将数据保存到磁盘)
3. Redis:适用于复杂场景的强大工具
3.1. 为什么 Redis 优于 Memcached?
Redis 不仅仅是缓存,它是一个功能完备的内存数据库,支持复杂的数据结构:列表、集合、哈希、位图。与 Memcached 不同,Redis 支持:
- 持久化 — 重启后数据不会丢失
- 事务和 Lua 脚本
- 发布/订阅用于消息交换
- 复制和集群
3.2. PHP 中使用 Redis 的示例
要使用 Redis,请使