上线前须配置日志通道分离(如payment通道)、禁用开发缓存刷新并执行config:cache等三步缓存编译、调优Redis连接池(推荐phpredis)、规范缓存键命名与标签失效策略,并实施空值缓存防穿透。

在Laravel项目上线前,必须确保日志可追溯、缓存策略合理且不干扰开发调试——否则线上报错找不到源头,缓存击穿或雪崩会直接拖垮服务。
配置日志驱动与通道分离
第一步:打开 config/logging.php,找到 ['default' => 'stack'] 这一行,确认默认通道为 stack,它能聚合多个日志源。
第二步:在 channels.stack 的 channels 数组里,保留 'daily' 和 'stderr',删掉 'single'——因为 single 会持续写入一个大文件,线上磁盘容易撑爆。
第三步:为关键业务单独建通道。在 channels 数组末尾添加:
'payment' => [<br> 'driver' => 'daily',<br> 'path' => storage_path('logs/payment.log'),<br> 'level' => 'info',<br> 'days' => 14,<br>],
这样支付模块的日志就和主日志隔离,排查问题时不用在几GB的 laravel.log 里翻找。
禁用开发环境缓存自动刷新
运行 php artisan config:clear 后,Laravel 默认仍会在每次请求中检查 .env 文件变更并重载配置——这在生产环境是严重性能浪费。
执行:php artisan config:cache → php artisan route:cache → php artisan view:cache。
【注意:执行前确保 APP_ENV=production 且 APP_DEBUG=false】,否则缓存会失败或暴露敏感路径。
这三步会把配置、路由、视图编译成静态 PHP 文件,下次请求直接加载,跳过所有解析逻辑。
Redis缓存连接池调优
方法一:修改 config/database.php 中 redis.default 配置块:
将 'persistent' => false 改为 true,并添加 'read_timeout' => 1 和 'retry_interval' => 100。
方法二:在 .env 中启用连接池:
REDIS_CLIENT=predis → 然后在 config/cache.php 的 redis 驱动下加入:'options' => ['cluster' => 'redis', 'prefix' => 'laravel_']。
方法三(推荐):改用 phpredis 扩展 + 连接池管理器。先安装扩展:sudo apt install php-redis,再在 config/database.php 中把 'client' => 'predis' 改为 'client' => 'phpredis'。
phpredis 是 C 扩展,比 predis 快 3~5 倍,且原生支持连接复用,无需额外中间件。
缓存键命名与失效策略落地
步骤一:所有缓存键必须带业务前缀和版本号,例如:cache()->put('user:profile:v2:'.$userId, $data, 3600)。
步骤二:避免用 Cache::forget() 删除单个键——高并发下可能漏删或误删。改用标签(tags)机制:
Cache::tags(['user', 'profile'])->put($key, $value, 3600) → 失效时只需 Cache::tags(['user', 'profile'])->flush()。
步骤三:对高频读+低频写的模型,启用缓存穿透防护。在查询数据库前加一层空值缓存:
if (is_null($user = Cache::get($key))) {<br> $user = User::find($id);<br> Cache::put($key, $user ?? '', 60); // 空结果也缓存60秒<br>}
这一步能拦住恶意 ID 请求,防止数据库被刷崩。


















