2016-07-07 78 views
5

我正在使用Redis在Laravel 5.2中缓存查询/路由。如何使用命令行清除laravel中的缓存?

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

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

config/cache.php文件我改了行

'prefix' => 'laravel', 

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

然后在我的.env文件,我加了前缀这样

对于开发

每个环境
CACHE_PREFIX="LaravelDev" 

分期

CACHE_PREFIX="LaravelStaging" 

另外,制造

CACHE_PREFIX="LaravelProduction" 

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

php artisan cache:clear 

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

我只想要清除只有“LaravelDev”缓存,并独自离开“LaravelStaging”和“LaravelProduction”

我怎么能清除一个特定环境的缓存?

回答

10

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

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

.env文件,你可以添加以下

为您的生产环境

REDIS_DATABASE=0 

为了您的临时环境

REDIS_DATABASE=1 

为开发环境

REDIS_DATABASE=2 

然后在Redis区间变化config\database.php此行'database' => 0,'database' => env('REDIS_DATABASE', 0),

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

php artisan cache:clear 
+1

太棒了!非常感谢 – Jaylen

+0

^合作签字! –

0

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

如果您使用的是Redis,您可以修改默认连接器以使用方法的'SCAN/DEL'命令。不过这不会很有效。

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

+0

当我执行php的工匠缓存您的环境:将其清除擦除Redis中的所有内容。我只是再次测试它。我看到的问题是,使用该应用程序的用户将得到不匹配令牌错误,因为会话也被清除。 – Jaylen

+0

解决方案是在分段和开发环境中为会话使用不同的存储类型,因此清除缓存不会影响活动用户。 –

+0

无法创建执行以下代码的命令行吗? $ redis = Cache :: getRedis(); $ keys = $ redis-> keys(Cache :: getPrefix()。“*”); ($ key作为$ key) foreach($ key as $ key) { Cache :: forget($ key); } – Jaylen