PHP在Linux上的缓存技术全景指南
一、缓存分层与适用场景
二、快速上手步骤
OPcache启用(PHP内置)
APCu启用(用户缓存)
$key = 'cfg_homepage';
$data = apcu_fetch($key);
if ($data === false) {
$data = buildHomepageData(); // 耗时计算或DB查询
apcu_store($key, $data, 3600); // 1小时
}
Memcached(分布式对象缓存)
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$key = 'article_42';
$data = $m->get($key);
if ($data === false) {
$data = fetchArticleFromDb(42);
$m->set($key, $data, 3600); // 1小时
}
Redis(多功能内存缓存)
$r = new Redis();
$r->connect('127.0.0.1', 6379);
$key = 'user:1001:profile';
$data = $r->get($key);
if ($data === false) {
$data = fetchUserProfile(1001);
$r->setex($key, 3600, $data); // 1小时
}
// 也可使用哈希存储结构化数据
// $r->hSet('user:1001', 'name', 'Alice'); $r->hGetAll('user:1001');
HTTP层缓存(Varnish示例)
backend default { .host = "127.0.0.1"; .port = "80"; }
sub vcl_recv {
if (req.http.Cookie ~ "PHPSESSID" || req.http.Authorization) { return (pass); }
return (hash);
}
sub vcl_backend_response {
if (bereq.http.Cache-Control ~ "max-age") {
set beresp.ttl = std.atoi(regsub(bereq.http.Cache-Control, ".*max-age=(\d+).*", "\1"));
}
}
三、组合方案与落地建议
四、运维与优化要点