php 8.5.5 不自带一键缓存配置,需手动启用opcache(加速脚本执行)和apcu(缓存用户数据),并注意区分cli/fpm配置、重启对应进程、设置合理内存与ttl,且apcu无精确过期机制。

PHP 8.5.5 本身不自带“一键缓存配置”,它提供的是缓存能力的底层支持(如 OPcache、APCu 扩展),具体怎么用、用在哪,得看你缓存什么:是 PHP 脚本编译结果(OPcache),还是用户数据(APCu/Redis),或是框架层的配置/模板(ThinkPHP 等)。直接配错地方,apcu_store() 报错或 opcache_reset() 没反应,都是因为没搞清层级。
启用 OPcache 加速脚本执行
这是 PHP 自带、必须开的基础项,否则每次请求都要重新编译 .php 文件。它不缓存你的业务数据,只缓存 opcode。
-
opcache.enable=1必须设为 1,且确认不是被注释掉(检查php.ini中该行前面没分号) -
opcache.memory_consumption=128建议调到 128MB 起,小项目 64MB 也够,但 ThinkPHP 或 Laravel 多文件时容易 hit limit -
opcache.revalidate_freq=0开发环境设为 0(每次请求都检查文件是否改动),生产环境可设为 60(每分钟检查一次) - 改完
php.ini后,必须重启 PHP-FPM 进程(systemctl restart php8.5-fpm或类似命令),不是重启 Nginx/Apache - 验证是否生效:运行
php -i | grep opcache,看到Opcode Caching => Enabled才算成功
安装并启用 APCu 缓存用户数据
APCu 是 PHP 8.5.5 官方推荐的用户数据内存缓存扩展,但它默认不装、不启——光写 apcu_store() 会直接报 Call to undefined function apcu_store()。
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 先装扩展:
pecl install apcu(Linux/macOS),Windows 需下载php_apcu.dll并放入 ext 目录 - 再启用:在对应 PHP 的
php.ini(注意区分 CLI 和 FPM 版本)里加一行:extension=apcu.so(Linux/macOS)或extension=php_apcu.dll(Windows) - 确认加载:
php -m | grep apcu有输出,或访问phpinfo()页面搜 “APCu” - 默认共享内存只有 32MB(
apc.shm_size=32M),存大数组(比如含 base64 图片)会静默失败;存之前务必判断返回值:if (apcu_store($key, $data, $ttl) === false) - APCu 没精确 TTL:设了
$ttl也只是“最多保留”,内存满时旧数据会被挤掉;关键数据建议自己加时间戳做逻辑过期
ThinkPHP 等框架的配置/模板缓存要单独生成
框架层缓存(如 config() 返回值、模板编译结果)和 PHP 底层缓存无关,不执行命令就不会生成,改了配置也不生效。
- 配置缓存:关掉
app_debug=true,删掉.env里的APP_DEBUG=true,再跑php think config:cache,生成runtime/config.php - 模板缓存:确保
'tpl_cache' => true在config/template.php里,且runtime/temp/可写;开发时想实时看效果,就php think config:clear+ 清空runtime/temp/ - Nginx FastCGI 缓存是另一层:需在
nginx.conf里配fastcgi_cache_path和fastcgi_cache指令,还要加fastcgi_ignore_headers Cache-Control Expires Set-Cookie,否则 ThinkPHP 默认的Set-Cookie会让 Nginx 拒绝缓存
缓存失效后怎么刷新才真正起效
改了代码或配置却没变化,往往是因为多层缓存没清干净,或者清了但没 reload 对应进程。
- OPcache 刷新:不能只改文件,得调
opcache_reset()(写个临时脚本访问触发),或改opcache.revalidate_freq=0后重启 PHP-FPM - APCu 刷新:
apcu_clear_cache()只清当前 PHP 进程的缓存,FPM 多 worker 下得逐个进程清,或干脆重启 PHP-FPM - 框架缓存:ThinkPHP 的
php think config:clear只删runtime/config.php,但runtime/temp/里的模板缓存得手动删,或用php think clear:all(如果支持) - 外部缓存(Redis/Memcached):别只靠 TTL 等自动过期,高频更新的数据建议主动
DEL key或FLUSHDB
最常被忽略的一点:PHP 8.5.5 下,opcache.enable_cli=1 要打开,否则 Composer、Artisan、think 命令行工具也会慢——很多人只记得配 FPM,忘了 CLI 环境。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










