PHP在Linux下的缓存技术使用指南
一 概览与选型
二 快速上手步骤
OPcache(Ubuntu/Debian示例)
sudo apt-get install php-opcache[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=0 ; 生产环境建议关闭,配合部署后重启或 opcache_reset
php -m | grep opcache 应能看到 opcache。APCu(用户缓存)
sudo apt-get install php-apcuextension=apcu.so(在 php.ini)$key = 'cfg_homepage';
$data = apcu_fetch($key);
if ($data === false) {
$data = buildHomepageData(); // 耗时计算或DB查询
apcu_store($key, $data, 3600); // 缓存1小时
}
Redis(对象/数据缓存)
sudo apt-get install redis-server php-redis$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'article_42';
$data = $redis->get($key);
if ($data === false) {
$data = getArticleFromDb(42);
$redis->setex($key, 3600, $data); // 1小时
}
Memcached(分布式对象缓存)
sudo apt-get install memcached php-memcached$mem = new Memcached();
$mem->addServer('127.0.0.1', 11211);
$key = 'sidebar_5';
$data = $mem->get($key);
if ($data === false) {
$data = buildSidebar(5);
$mem->set($key, $data, 3600);
}
HTTP层缓存(Nginx proxy_cache 示例)
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:9000; # 上游PHP-FPM或应用
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
sudo systemctl reload nginx。三 生产环境建议与注意事项
opcache.validate_timestamps=1 便于调试;生产建议关闭并按部署流程重启或调用 opcache_reset() 刷新。四 常见问题排查
zend_extension=opcache.so 已加载、对应 SAPI 的 php.ini 已启用、重启 PHP-FPM/Apache;CLI 与 FPM 可能使用不同 php.ini。systemctl status redis/memcached)、监听地址与端口、防火墙/安全组、SELinux/AppArmor 策略。proxy_cache_path 目录可写、命中头 X-Proxy-Cache 返回 HIT/MISS、对带 Cookie/PHPSESSID/Authorization 或 Cache-Control: no-cache 的请求设置 proxy_cache_bypass/proxy_no_cache 跳过缓存。以上步骤覆盖 OPcache、APCu、Redis、Memcached、Nginx/Varnish 的安装、配置与实战要点,可直接用于 LAMP/LNMP 场景并按需组合分层缓存以提升性能与稳定性。