web-dev-qa-db-ja.com

コマンドラインを使用してlaravelでキャッシュをクリアするにはどうすればよいですか?

Laravel 5.2。でクエリ/ルートをキャッシュするためにRedisを使用しています。

同じWebサーバー、つまり「実稼​​働」、「ステージング」、「開発」で3つの環境を実行しています。

環境ごとに異なるキャッシュ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」のみを残したい

特定の環境のキャッシュをクリアするにはどうすればよいですか?

12
Jaylen

_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
_
17
Junior

_cache:clear_ artisanコマンドが行うことは、現在のコネクタでflush関数を呼び出します。キャッシングエンジンは機能によって異なるため、キーを選択的に期限切れにしてキャッシュAPIをユニバーサルに保つことはできないと思います。 Redisなどのエンジンはそのような機能を提供しますが、たとえばmemcachedは提供しません。

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

アプリケーションがキャッシュを正しくフラッシュする場合、キャッシュは自動的に再構築されるため、問題は発生しません。とにかく期限切れになる可能性があるため、キャッシュにあるデータを予期しないでください。

0
Chris Cynarski