php 缓存实现
PHP 缓存实现方法
文件缓存
文件缓存是最简单的缓存方式,将数据存储在文件中,适合小型项目或临时缓存需求。
创建缓存文件并写入数据:
$cacheFile = 'cache/data.cache';
$data = '缓存内容';
file_put_contents($cacheFile, serialize($data));
读取缓存文件:
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < 3600)) {
$cachedData = unserialize(file_get_contents($cacheFile));
} else {
// 重新生成数据
}
Memcached 扩展
Memcached 是高性能分布式内存对象缓存系统,适合大规模应用。
安装并启用 Memcached 扩展后使用:
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
// 存储数据
$memcached->set('key', 'value', 3600);
// 获取数据
$value = $memcached->get('key');
if ($value === false) {
// 数据不存在或已过期
}
Redis 缓存
Redis 是更高级的键值存储系统,支持多种数据结构。
安装 Redis 扩展后连接使用:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 设置缓存
$redis->set('key', 'value');
$redis->expire('key', 3600);
// 获取缓存
$value = $redis->get('key');
APC/OPcache
PHP 内置的字节码缓存,可显著提高 PHP 性能。
APC 用户缓存示例:
if (apc_exists('key')) {
$data = apc_fetch('key');
} else {
apc_store('key', $data, 3600);
}
数据库查询缓存
对频繁执行的数据库查询结果进行缓存。
使用 PDO 实现简单查询缓存:
$cacheKey = md5($sql);
if ($cachedResult = $memcached->get($cacheKey)) {
return $cachedResult;
} else {
$stmt = $pdo->query($sql);
$result = $stmt->fetchAll();
$memcached->set($cacheKey, $result, 1800);
return $result;
}
页面级缓存
对整个页面输出进行缓存。
ob_start() 实现页面缓存:

ob_start();
// 页面内容
$content = ob_get_contents();
file_put_contents('cache/page.html', $content);
ob_end_flush();
缓存失效策略
- 时间过期:设置固定缓存时间
- 手动清除:根据业务逻辑删除缓存
- 标签缓存:通过标签管理一组相关缓存
缓存注意事项
- 敏感数据不应缓存
- 缓存键命名应有意义且唯一
- 大量小文件缓存应考虑合并
- 缓存系统应监控内存使用情况
每种缓存方案各有优劣,应根据项目规模、性能需求和技术栈选择最适合的方案。文件缓存简单但性能有限,Memcached/Redis 适合高性能需求,APC/OPcache 对 PHP 本身性能提升明显。






