路由缓存和配置缓存是生产环境启动底线:config:cache将所有配置合并为bootstrap/cache/config.php以跳过解析,route:cache编译路由为静态数组提升匹配速度50%+,二者均需配合Redis缓存驱动、APP_DEBUG=false等配套设置。

路由缓存和配置缓存不是“锦上添花”,而是生产环境的启动底线。没开这两项,Laravel 每次请求都要重新 require 十几个 config 文件、逐行执行全部路由定义——相当于每次开门都重装一把锁。
配置缓存:把十几份配置压成一个数组
config:cache 把 所有 config/*.php 合并编译为 bootstrap/cache/config.php,后续请求跳过解析,直读 PHP 数组。这步必须最先做,因为路由缓存里可能调用 config() 读取 locale 或服务密钥。
- 上线前先清旧缓存:
php artisan config:clear(尤其从开发机同步代码后必做) - 再生成新缓存:
php artisan config:cache - 验证是否生效:检查
bootstrap/cache/config.php是否存在且内容是合法 PHP 数组 - 注意:
.env变量只能在 config 文件里用env()读;缓存后,控制器或 Blade 中直接调用env()会返回 null
路由缓存:跳过注册过程,匹配快 50%+
route:cache 把 routes/web.php 和 api.php 编译成静态数组文件(如 bootstrap/cache/routes-v7.php),不再逐行执行 Route::get 等语句。它不支持闭包路由,只认控制器方法写法。
- 确保所有路由都用控制器语法:
Route::get('/user', [UserController::class, 'index']) - 执行:
php artisan route:cache - 改了路由?必须先
php artisan route:clear,再重新 cache - Laravel 12+ 推荐用
php artisan route:cache:optimize,生成更扁平的索引结构,但需禁用运行时条件路由(比如if (app()->environment('local'))包裹的路由)
多语言项目要单独缓存每种语言
用 laravel-localization 的项目,如果直接 route:cache,所有语言路由会混在一个文件里,匹配时仍要遍历判断,白忙一场。
- 安装扩展:
composer require mcamara/laravel-localization - 为每种语言生成专属缓存:
php artisan route:trans:cache(生成routes-zh-CN-v12.php、routes-en-v12.php等) - 在 AppServiceProvider 的 boot() 中加载当前语言缓存:
$this->loadTranslatedCachedRoutes();
配套动作一个都不能少
光缓存路由和配置还不够。它们像发动机,得配上合适的燃料和冷却系统:
-
缓存驱动必须切 Redis:.env 中设
CACHE_DRIVER=redis,别用 file(高并发下 I/O 瓶颈明显) - APP_DEBUG=false、APP_ENV=production 必须写死在 .env,不能靠服务器环境变量覆盖
-
关掉 SQL 日志:
DB_LOG_QUERIES=false,日志级别设为LOG_LEVEL=error -
视图缓存按需开启:
php artisan view:cache适合镜像构建或离线部署;日常只要storage/framework/views/可写,首次访问自动编译











