1. 使用内存缓存系统(Memcached/Redis)
Memcached和Redis是高性能内存缓存工具,可有效减少动态内容的数据库查询次数。在Debian上,通过sudo apt-get install memcached或sudo apt-get install redis-server安装后,需配置应用使用对应扩展(如PHP的php-memcached或php-redis)。例如,PHP应用可通过$memcached->set()和$memcached->get()方法缓存数据库查询结果,避免重复访问数据库。
2. 配置Web服务器缓存(Nginx/Apache)
proxy_cache_path指令设置缓存路径(如/var/cache/nginx),并在server或location块中启用缓存。例如:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
}
这会将动态内容缓存到指定路径,后续相同请求直接从缓存读取。mod_cache和mod_cache_disk模块(sudo a2enmod cache && sudo a2enmod cache_disk),并在配置文件中设置磁盘缓存。例如:<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /dynamic_content
CacheRoot "/var/cache/apache2/mod_cache_disk"
CacheDirLevels 2
CacheDirLength 1
CacheIgnoreHeaders Set-Cookie
CacheDefaultExpire 300
</IfModule>
</IfModule>
这会缓存/dynamic_content目录下的动态内容,默认过期时间为300秒。3. 优化PHP缓存
PHP动态内容的缓存可通过内置函数或扩展实现。例如,使用file_put_contents()将数据库查询结果写入本地文件,后续请求直接读取文件;或安装Memcached/Redis扩展,将数据存储在内存中。例如:
// 简单文件缓存示例
$cache_file = '/tmp/dynamic_content.cache';
if (file_exists($cache_file) && time() - filemtime($cache_file) < 300) {
echo file_get_contents($cache_file); // 读取缓存
} else {
$data = fetchDataFromDB(); // 查询数据库
file_put_contents($cache_file, $data); // 写入缓存
echo $data;
}
或使用Redis扩展:$redis->setex('key', 300, $data)(缓存300秒)。
4. 设置HTTP缓存头
通过设置Cache-Control、Expires或ETag头,让浏览器缓存动态内容,减少重复请求。例如,在Nginx中添加:
location /dynamic {
add_header Cache-Control "public, max-age=300"; # 浏览器缓存5分钟
add_header ETag $request_time; # 使用时间戳作为ETag
}
或在PHP中通过header()函数设置:
header("Cache-Control: public, max-age=300");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 300) . " GMT");
这会告知浏览器缓存动态内容300秒。
5. 清理与监控缓存
定期清理无用缓存以释放资源:
sudo apt-get clean(清理未安装的软件包)、sudo apt-get autoclean(清理过期缓存)、sudo apt-get autoremove(删除不再需要的软件包)。free -h查看内存缓存、df -h查看磁盘缓存、htop监控进程资源占用,确保存储空间充足。