You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Forge中仅清除指定站点/环境的缓存?

解决Laravel Forge多环境缓存清除冲突问题

核心原因是你的生产和预发布环境共享了同一个缓存存储(无论是文件、Redis还是其他类型),执行php artisan cache:clear会清除整个存储的缓存,导致互相影响。以下是几种可靠的解决办法:

1. 给每个环境配置独立的缓存存储路径/数据库

文件缓存场景

修改config/cache.php中文件驱动的路径,根据当前环境区分:

'file' => [
    'driver' => 'file',
    'path' => storage_path('framework/cache/data/' . env('APP_ENV')),
],

确保两个环境的.env文件中APP_ENV分别设为production和staging,这样缓存文件会分别存在storage/framework/cache/data/production和staging目录下。

Redis缓存场景

如果用Redis,给不同环境分配独立的数据库:
修改config/database.php中的Redis连接配置:

'cache' => [
    'url' => env('REDIS_URL'),
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', '6379'),
    'database' => env('APP_ENV') === 'production' ? 0 : 1,
],

然后在config/cache.php中指定使用这个缓存连接:

'default' => env('CACHE_DRIVER', 'redis'),
'stores' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'cache',
    ],
],

2. 执行清除命令时指定对应环境

在部署脚本中,给cache:clear命令加上--env参数,明确指定当前环境:

  • 生产环境部署脚本:
php artisan cache:clear --env=production
  • 预发布环境部署脚本:
php artisan cache:clear --env=staging

这个命令会加载对应环境的配置,只会清除该环境配置下的缓存内容,前提是你已经按步骤1配置了环境独立的缓存存储。

3. 使用缓存前缀(备选方案)

如果不想改动存储路径/数据库,可以给每个环境设置独立的缓存前缀:
在各自的.env文件中添加:

  • 生产环境:CACHE_PREFIX=prod_
  • 预发布环境:CACHE_PREFIX=staging_
    然后修改config/cache.php中的前缀配置:
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'),

这种方式下,默认的cache:clear还是会清除整个存储,但你可以自定义一个Artisan命令来只删除对应前缀的缓存键。不过相比前两种方法,这种需要额外开发,不如直接隔离存储来得直接。

内容的提问来源于stack exchange,提问作者Craig Lovelock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:12:22