2016-07-07 120 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