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」のみを残したい
特定の環境のキャッシュをクリアするにはどうすればよいですか?
_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
_
_cache:clear
_ artisanコマンドが行うことは、現在のコネクタでflush
関数を呼び出します。キャッシングエンジンは機能によって異なるため、キーを選択的に期限切れにしてキャッシュAPIをユニバーサルに保つことはできないと思います。 Redisなどのエンジンはそのような機能を提供しますが、たとえばmemcachedは提供しません。
Redisを使用している場合は、flush()
メソッドに「SCAN/DEL」コマンドを使用するようにデフォルトのコネクターを変更できます。それでも、これはあまり効果的ではありません。
アプリケーションがキャッシュを正しくフラッシュする場合、キャッシュは自動的に再構築されるため、問題は発生しません。とにかく期限切れになる可能性があるため、キャッシュにあるデータを予期しないでください。