php实现缓存
PHP实现缓存的常用方法
文件缓存
使用文件系统存储缓存数据,适合小型项目或临时缓存需求。创建一个缓存目录,将数据序列化后写入文件。
$cacheFile = 'cache/data.cache';
$data = ['key' => 'value'];
// 写入缓存
file_put_contents($cacheFile, serialize($data));
// 读取缓存
if (file_exists($cacheFile)) {
$cachedData = unserialize(file_get_contents($cacheFile));
}
设置缓存过期时间可通过在文件中存储时间戳,读取时检查是否过期。
$expire = time() + 3600; // 1小时后过期
file_put_contents($cacheFile, $expire . PHP_EOL . serialize($data));
Memcached扩展
Memcached是高性能分布式内存对象缓存系统,需安装PHP的Memcached扩展。
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
// 设置缓存
$memcached->set('key', 'value', 3600);
// 获取缓存
$value = $memcached->get('key');
支持设置过期时间(秒),适合需要快速读写的场景。可配置多个服务器实现分布式缓存。
Redis缓存
Redis作为内存数据结构存储,支持更复杂的数据类型和持久化。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 字符串缓存
$redis->set('key', 'value', ['ex' => 3600]);
// 哈希类型
$redis->hSet('user:1', 'name', 'John');
Redis提供原子操作和发布订阅功能,适合高并发场景。支持设置TTL实现自动过期。
OPcache加速
PHP内置的OPcache通过缓存预编译脚本字节码提升性能,需在php.ini中启用。
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
适用于生产环境,能显著提高PHP脚本执行速度。注意开发时可能需要禁用以避免缓存问题。
浏览器端缓存
通过HTTP头控制浏览器缓存行为,减少服务器负载。
header('Cache-Control: public, max-age=3600');
header('Expires: '.gmdate('D, d M Y H:i:s', time()+3600).' GMT');
适用于静态资源缓存,可与ETag或Last-Modified配合实现条件请求。
数据库查询缓存
对频繁查询结果进行缓存,减少数据库压力。
$cacheKey = md5($sql);
if (!$result = $memcached->get($cacheKey)) {
$result = $pdo->query($sql)->fetchAll();
$memcached->set($cacheKey, $result, 1800);
}
建议对复杂查询或聚合结果使用,简单查询可能适得其反。注意缓存失效策略。
全页缓存
对整个页面输出进行缓存,适合内容不常变化的页面。
ob_start();
// 页面内容...
$content = ob_get_contents();
file_put_contents('cache/page_'.md5($_SERVER['REQUEST_URI']).'.html', $content);
ob_end_flush();
可通过URL生成唯一缓存键,配合.htaccess实现直接返回静态文件。需考虑动态内容的处理方式。







