PHP代码服务器端缓存是提升应用响应速度、降低服务器资源消耗的核心优化手段,不同的缓存组件针对不同的应用场景,配置方式和优化侧重点也存在差异。合理的缓存配置可以让PHP应用的吞吐量提升数倍,尤其适合高并发的业务场景。

常用PHP服务器端缓存组件说明
目前主流的PHP服务器端缓存组件主要分为三类,分别解决不同层面的性能问题:
- OPcache:PHP官方内置的字节码缓存,用于将PHP脚本编译后的字节码缓存在内存中,避免每次请求都重新编译脚本,是所有PHP应用都建议开启的基础缓存。
- APCu:用户数据缓存,用于在内存中存储PHP脚本运行时的临时数据,适合存储配置信息、简单计算结果等不需要持久化的数据。
- Redis:高性能的键值型缓存服务,支持持久化,适合存储需要跨进程、跨服务器共享的数据,比如用户信息、商品库存等。
OPcache配置方法
OPcache从PHP 5.5版本开始内置,只需要修改php.ini配置文件即可开启和调优:
; 开启OPcache扩展 zend_extension=opcache.so ; 启用OPcache opcache.enable=1 ; CLI环境下也启用OPcache,适合命令行脚本执行 opcache.enable_cli=1 ; 共享内存大小,单位MB,根据服务器内存调整,建议至少128 opcache.memory_consumption=128 ; 存储预定义字符串的内存大小,单位MB,建议8-16 opcache.interned_strings_buffer=16 ; 最大缓存文件数量,根据项目PHP文件数量调整,建议4000-10000 opcache.max_accelerated_files=10000 ; 脚本更新后是否自动重新缓存,开发环境设为1,生产环境设为0 opcache.validate_timestamps=0 ; 检查脚本更新的时间间隔,单位秒,validate_timestamps为1时生效 opcache.revalidate_freq=0 ; 快速关闭,提升请求结束时的资源释放速度 opcache.fast_shutdown=1
配置完成后重启PHP服务,可以通过phpinfo()函数查看OPcache的状态,确认是否生效。
APCu配置方法
APCu需要先安装扩展,然后通过php.ini配置参数:
; 开启APCu扩展 extension=apcu.so ; 启用APCu apcu.enabled=1 ; CLI环境下启用APCu apcu.enable_cli=1 ; 共享内存大小,单位MB,建议64-256 apcu.shm_size=128 ; 缓存条目数量上限,建议1000-4000 apcu.entries_hint=2000 ; TTL默认时间,单位秒,0表示永不过期 apcu.ttl=0 ; 垃圾回收的概率,默认1000,数值越低回收频率越高 apcu.gc_ttl=3600
APCu的使用示例代码如下:
<?php
// 存储数据到APCu缓存,键为user_config,值是一个数组,缓存时间3600秒
$config = ['site_name' => '测试站点', 'version' => '1.0'];
apcu_store('user_config', $config, 3600);
// 从APCu缓存读取数据
$cachedConfig = apcu_fetch('user_config');
if ($cachedConfig !== false) {
echo '从缓存获取配置:';
print_r($cachedConfig);
} else {
echo '缓存未命中,需要重新生成配置';
}
?>Redis作为PHP缓存的配置方法
首先需要在服务器安装Redis服务,然后安装PHP的Redis扩展,之后通过php.ini配置扩展并编写调用代码:
; 开启Redis扩展 extension=redis.so
PHP连接Redis并使用缓存的示例代码如下:
<?php
// 连接Redis服务,地址为127.0.0.1,端口6379,无密码
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 设置缓存,键为article_100,值为文章内容,过期时间600秒
$articleContent = '这是一篇测试文章的内容';
$redis->setex('article_100', 600, $articleContent);
// 读取缓存
$content = $redis->get('article_100');
if ($content !== false) {
echo '从Redis缓存获取内容:' . $content;
} else {
echo '缓存未命中,需要查询数据库获取内容';
}
// 关闭Redis连接
$redis->close();
?>缓存性能优化建议
在配置缓存时,还需要注意以下优化点,才能最大化缓存的收益:
- 生产环境建议关闭
opcache.validate_timestamps,避免每次请求都检查脚本更新,更新代码后通过重启PHP服务或者调用opcache_reset()刷新缓存。 - APCu和OPcache的内存大小需要根据服务器实际内存调整,不要超过服务器可用内存的50%,避免内存溢出。
- Redis缓存需要根据业务设置合理的过期时间,避免无效数据长期占用内存,同时对于热点数据可以设置永不过期,通过主动更新机制保证数据一致性。
- 不要过度缓存,对于频繁变化、数据量大的内容不建议放入缓存,避免缓存命中率低反而增加开销。
- 可以通过
opcache_get_status()、apcu_cache_info()等函数定期监控缓存的命中率和使用情况,根据监控结果调整配置参数。
常见问题排查
配置缓存后如果发现没有生效,可以按以下步骤排查:
- 检查扩展是否正确安装,通过
php -m命令查看扩展是否在列表中。 - 确认php.ini配置中的参数是否正确,尤其注意单位是MB还是字节,避免参数设置错误。
- 重启对应的服务,PHP配置修改后需要重启PHP服务才能生效,Redis配置修改后需要重启Redis服务。
- 检查缓存键名是否冲突,不同业务的缓存键建议添加统一的前缀,避免键名重复导致数据覆盖。
PHP_opcacheAPCuRedis缓存配置修改时间:2026-06-05 03:28:34