2016-07-07 42 views
5

Redisを使用してLaravel 5.2のクエリ/ルートをキャッシュしています。laravelでコマンドラインを使用してキャッシュをクリアするにはどうすればよいですか?

私は、同じWebサーバー上で実行されている3つの環境、つまり「プロダクション」、「ステージング」、および「開発」を持っています。

私は異なる環境にキャッシュをリンクできるように、別のキャッシュprefixの値を設定しました。私は私の.envファイルに次に

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

にライン

'prefix' => 'laravel', 

を変更config/cache.phpファイルで

は、私はDevの

についてこの

のように各環境の接頭辞を追加しました

CACHE_PREFIX="LaravelDev" 
01生産

CACHE_PREFIX="LaravelProduction" 

について

CACHE_PREFIX="LaravelStaging" 

をステージングするために

私はこの

php artisan cache:clear 

のようにコマンドラインからキャッシュをクリアすることができます。しかし上記のコードは、すべてのキャッシュをクリアします知っています私の環境の

私はどのように私は特定の環境のためにキャッシュをクリアすることができますか?

「LaravelStaging」のみ「LaravelDev」のキャッシュをクリアして、一人で残したいと、「LaravelProduction」

答えて

10

cache:clearコマンドを実行すると、データベースへの接続に関連するすべてのキャッシュが削除されます。

複数のインスタンスを持つ同じRedisサーバーを使用する場合は、各インスタンスに対して異なるRedisデータベースを使用できます。

.envファイルでは、あなたの開発環境のステージング環境

REDIS_DATABASE=1 

のために本番環境

REDIS_DATABASE=0 

について以下

を追加することができます

REDIS_DATABASE=2 

そして、あなたは、私はPHPの職人のキャッシュを実行すると、以下のコマンド

php artisan cache:clear 
+1

Brilliant!大変ありがとうございました – Jaylen

+0

^co-sign that! –

0

artisanコマンドは、現在のコネクタでflush関数を呼び出します。キャッシングエンジンは機能に応じて変化するため、キャッシュAPIを選択的に保持してキーを期限切れにすることはできません。 Redisのようなエンジンはそのような機能を提供しますが、memcachedはそうではありません。

Redisを使用している場合は、flush()メソッドで 'SCAN/DEL'コマンドを使用するようにデフォルトコネクタを変更できます。それでも、これはあまり効果的ではありません。

アプリケーションがキャッシュを正しく使用している場合は、キャッシュが再構築されるため、問題は発生しません。とにかく期限切れになる可能性があるため、一部のデータがキャッシュに存在することは決してありません。

+0

を使用して、あなたの環境のいずれかのキャッシュをクリアすることができますRedisセクションの変更でconfig\database.phpこのライン'database' => 0,

'database' => env('REDIS_DATABASE', 0),に:それを明確にRedisのすべてを消去します。私はもう一度それをテストしました。私が見ている問題は、セッションもクリアされるため、アプリケーションを使用しているユーザーに不一致トークンエラーが発生することです。 – Jaylen

+0

解決策は、ステージング環境とデベロッパー環境のセッションに異なるストレージタイプを使用するため、キャッシュをクリアしてもライブユーザーに影響はありません。 –

+0

次のコードを実行するコマンドラインを作成できませんか? $ redis =キャッシュ:: getRedis(); $ keys = $ redis-> keys(Cache :: getPrefix()。 "*"); foreach($ keys as $ key) { Cache :: forget($ key); } – Jaylen

関連する問題