在Linux环境下,PHP的缓存技术其实是个老生常谈的话题,但每次聊起来都能发现一些新门道。今天咱们就把几种常见方案掰开揉碎了说说,从配置到代码,从单机到分布式,一次性讲透。

-
OPcache:最基础的翻跟斗
OPcache是PHP内置的扩展,干的事就是把PHP脚本编译成字节码,然后扔进共享内存里。这样下次再请求同一个脚本时,就不用重新读取文件、重新编译了,省掉了文件系统和编译的开销。启用它很简单,在php.ini里加上或修改这几行配置就行:[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60这些数值可以根据你的服务器内存和项目规模灵活调整,比如内存吃紧可以适当降低
memory_consumption。 -
Memcached:分布式缓存的经典选择
Memcached是一个高性能的分布式内存缓存系统,常用来缓存数据库查询结果、会话数据这类明明很常用但每次查询都费劲的东西。要让它跑在PHP里,先装扩展:sudo apt-get install php-memcached然后在代码里这样用:
$memcached = new Memcached(); $memcached->addServer('localhost', 11211); $key = 'my_cache_key'; $data = $memcached->get($key); if ($data === false) { // 缓存没命中,从数据库或其他地方获取数据 $data = 'some_data'; // 存入缓存,设定过期时间3600秒(1小时) $memcached->set($key, $data, 3600); } echo $data;注意
addServer可以添加多个服务器,实现集群效果。 -
Redis:全能型选手
Redis和Memcached类似,但它更强大——支持更丰富的数据结构,还能做消息队列什么的。PHP里用Redis先装扩展:sudo apt-get install php-redis代码示例:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $key = 'my_cache_key'; $data = $redis->get($key); if ($data === false) { $data = 'some_data'; $redis->set($key, $data, 3600); // 过期时间1小时 } echo $data;Redis的持久化特性让它比Memcached更适合需要数据恢复的场景。
-
文件缓存:简单粗暴,单机够用
如果应用没到分布式那一步,文件缓存是最省事的方案。直接用PHP的file_put_contents()和file_get_contents()就能搞定——把序列化后的数据写到文件里,读取时再反序列化。不过要注意文件并发和磁盘I/O压力,小项目用用还行。 -
APCu:本地内存缓存,轻量级选手
APCu是APC的老版本升级而来,专门用来缓存用户数据,不需要额外服务,直接存PHP内存里。安装方式:sudo pecl install apcu然后在
php.ini里加上extension=apcu.so。代码使用:$key = 'my_cache_key'; $data = apcu_fetch($key); if ($data === false) { $data = 'some_data'; apcu_store($key, $data, 3600); // 缓存1小时 } echo $data;APCu的优势在于极低的延迟,因为数据就在当前PHP进程的内存里,但缺点是跨进程共享有限,且重启PHP后数据会丢失。
总结一下,选择哪种缓存方案,得看具体场景:大型应用、需要分布式支持,优先考虑Memcached或Redis;小型项目、单机部署,OPcache配合APCu或文件缓存就完全够用。性能、可用性、持久性和易用性之间,总得有个取舍——没有银弹,但有最适合你的那一把。