如何使用命令行清除laravel中的缓存?

时间:2016-07-07 22:50:18

标签: laravel caching laravel-5 laravel-5.2 artisan

我使用Redis来缓存Laravel 5.2中的查询/路由。

我在同一个Web服务器上运行了3个环境,即“生产”,“暂存”和“开发”。

对于每个环境,我设置了不同的缓存prefix值,以允许我将缓存链接到不同的环境。

config/cache.php文件中,我更改了行

'prefix' => 'laravel',

'prefix' => ENV('CACHE_PREFIX', 'laravel'),

然后在我的.env文件中,我为每个环境添加了这样的前缀

对于Dev

CACHE_PREFIX="LaravelDev"

For Staging

CACHE_PREFIX="LaravelStaging"

生产

CACHE_PREFIX="LaravelProduction"

我知道我可以像这样从命令行清除缓存

php artisan cache:clear

但上面的代码将清除我所有环境的缓存。

我只想清除“LaravelDev”的缓存而单独留下“LaravelStaging”和“LaravelProduction”

如何清除特定环境的缓存?

3 个答案:

答案 0 :(得分:17)

cache:clear命令将删除与数据库连接相关的所有缓存。

如果要对多个实例使用相同的Redis服务器,则可以为每个实例使用不同的Redis数据库。

.env文件中,您可以添加以下内容

适合您的制作环境

 REDIS_DATABASE=0

适用于您的暂存环境

 REDIS_DATABASE=1

适用于您的开发环境

 REDIS_DATABASE=2

然后在config\database.php部分的Redis中更改此行'database' => 0,  到'database' => env('REDIS_DATABASE', 0),

现在,您可以使用以下命令清除任何环境的缓存

php artisan cache:clear

答案 1 :(得分:1)

可以使用不同的redis数据库,而不是使用CACHE_PREFIX。例如:生产=> 1,阶段=> 2,开发=> 3。 如果您想更熟悉一点,请使用此链接:

  1. What's the Point of Multiple Redis Databases?
  2. List All Redis Databases

因此,在每个环境(生产/阶段/开发)的.env文件中,您需要定义不同的REDIS_CACHE_DB env值。

链接到该行使用此变量https://github.com/laravel/laravel/blob/2a2522d8824c0852e30a7e3e07d46a543eb4b33d/config/database.php#L142。 .env的示例:

.env.production

REDIS_CACHE_DB=1

.env.stage

REDIS_CACHE_DB=2

.env.development

REDIS_CACHE_DB=3

不要忘记更改环境变量https://laravel.com/docs/7.x/configuration#configuration-caching

后清除配置缓存。

希望这会有所帮助!

答案 2 :(得分:0)

cache:clear artisan命令在当前连接器上调用flush函数的功能。由于缓存引擎因功能而异,我不认为可以使密钥选择性地保持缓存API的通用性。像Redis这样的引擎提供了这样的功能,但是memcached例如不是。

如果您正在使用Redis,则可以修改默认连接器以使用' SCAN / DEL' flush()方法的命令。这仍然不会非常有效。

如果您的应用程序正确使用缓存,则不应该导致任何问题,因为缓存将自行重建。您永远不应该期望某些数据存在于缓存中,因为它可能会过期。