我使用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”
如何清除特定环境的缓存?
答案 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。 如果您想更熟悉一点,请使用此链接:
因此,在每个环境(生产/阶段/开发)的.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()
方法的命令。这仍然不会非常有效。
如果您的应用程序正确使用缓存,则不应该导致任何问题,因为缓存将自行重建。您永远不应该期望某些数据存在于缓存中,因为它可能会过期。