Laravel基本チュートリアル-キャッシュ

10484 ワード

キャッシュ
コンフィギュレーション
Laravelは複数のキャッシュシステムに対して統一的なAPIを提供している.キャッシュされたプロファイルはconfig/cache.phpに保存されます.このファイルでは、アプリケーション全体でデフォルトでどのキャッシュドライバを使用するかを指定できます.Laravelは、MemcachedやRedisなどの現在の主流のキャッシュシステムをサポートします.
キャッシュされたコンフィギュレーション・ファイルには、ファイルにドキュメント・コメントがある追加のコンフィギュレーション・オプションも含まれています.これらのオプション・コメントをすでに読んでいることを確認してください.デフォルトでは、Laravel構成ではfileキャッシュドライバが使用されます.このドライバは、ファイルシステムにシーケンス化されたキャッシュオブジェクトを格納します.大規模なアプリケーションでは、MemcachedやAPCなどのメモリレベルのキャッシュを使用することをお勧めします.laravelで同じドライバに複数のキャッシュを構成することもできます.
キャッシュの前提条件
データベース#データベース#databaseキャッシュドライバを使用する場合は、これらのキャッシュ・アイテムを含むテーブルを作成する必要があります.次のSchemaの定義に基づいて、テーブルファイルを作成できます.
Schema::create('cache', function ($table) {
  $table->string('key')->unique();
  $table->text('value');
  $table->integer('expiration'); 
});
php artisan cache:table Artisanコマンドを使用して、正しいキャッシュ・テーブル構造の移行を生成することもできます.
Memcached
Memcachedキャッシュを使用するには、Memcached PECLパッケージをインストールする必要があります.
デフォルトの構成は、Memcached::addServerでTCP/IPを使用します.
'memcached' => [
  [
    'host' => '127.0.0.1',
    'port' => 11211,
    'weight' => 100
  ]
],

UNIXソケットパスを使用してhostを設定することもできます.そうするには、port0に設定する必要があります.
'memcached' => [
  [
    'host' => '/var/run/memcached/memcached.sock',
    'port' => 0,
    'weight' => 100
  ],
],

Redis
Redisキャッシュを使用する前に、predis/predisをComposerでインストールする必要があります.Redis構成の詳細については、Laravel documentation pageを参照してください.
キャッシュの使用
キャッシュインスタンスの取得Illuminate\Contracts\Cache\FactoryおよびIlluminate\Contracts\Cache\Repository契約は、Laravelキャッシュサービスへのアクセスを提供する.Factory契約は、アプリケーション内のすべてのキャッシュドライバの定義を提供する.Repository契約は、通常、あなたのcacheプロファイルに基づいて使用されるデフォルトのキャッシュドライバの実装です.
実際には、Cacheの仮面を使用することもできます.このドキュメントでは、Cacheの仮面を使用して例を挙げています.Cache仮面は、Laravel下位キャッシュ契約の実装にアクセスするための便利で簡潔な方法を提供する.
たとえば、Cacheのマスクをコントローラに導入します.

複数のキャッシュ・ストレージへのアクセスCache仮面のstoreメソッドで、複数のキャッシュストレージにアクセスできます.storeメソッドに渡されるkeyは、cacheプロファイルのstoresプロファイルのリストの1つと一致するはずです.
$value = Cache::store('file')->get('foo');

Cache::store('redis')->put('bar', 'baz', 10);

保存猶予の取得Cacheマスクのgetメソッドを使用して、キャッシュから関連項目の値を取得できます.このアイテムがキャッシュに存在しない場合は、nullを返します.必要に応じて、2番目のパラメータをgetメソッドに渡すこともできます.このパラメータが渡す値は、キャッシュ内のアイテムが存在しないときに返されます.
$value = Cache::get('key');

$value = Cache::get('key', 'default');
Closureをデフォルト値として渡すこともできます.キャッシュされたアイテムが存在しない場合、Closureが返す値がデフォルト値になります.クローズド・パッケージを渡すことで、データベースまたは他の外部サービスからデフォルト値を取得するのを遅らせることができます.
$value = Cache::get('key', function () {
  return DB::table(...)->get(); 
});

アイテムが存在するかどうかを確認hasメソッドを使用して、キャッシュにアイテムが存在するかどうかを確認できます.
if (Cache::has('key')) {
  //
}

増減項目の値incrementメソッドとdecrementメソッドを使用して、キャッシュ・アイテムの整数値を調整できます.この2つの方法は、2番目のパラメータとして1つの配列を受け入れることで、対応する数値調整を行うことができます.
Cache::increment('key');

Cache::increment('key', $amount);

Cache::decrement('key');

Cache::decrement('key', $amount);

キャッシュ内のアイテムの取得または更新
キャッシュからアイテムを取得したい場合がありますが、アイテムが存在しない場合は、デフォルト値をアイテムに保存したい場合があります.たとえば、キャッシュからユーザーを取得します.しかし、彼は存在しないので、データベースから彼を取得し、キャッシュに追加する必要があります.Cache::rememberの方法で実行できます.
$value = Cache::remember('users', $minutes, function () {
  return DB::table('users')->get(); 
});

キャッシュに取得されていない場合、remeberメソッドに渡された閉パケットは実行され、その実行結果はキャッシュに置き換えられます.rememberforeverの方法を統合することもできます.
$value = Cache::rememberForever('users', function () {
  return DB::table('users')->get(); 
});

取得と削除
アイテムを検索し、検索しながらキャッシュから削除する必要がある場合は、pullメソッドを使用します.getメソッドと同様に、アイテムが取得されない場合は、nullが返されます.
$value = Cache::pull('key');

アイテムをキャッシュに保存Cache仮面のputメソッドを使用して、アイテムをキャッシュに格納できます.キャッシュにアイテムを格納する場合は、キャッシュする分の値を指定する必要があります.
Cache::put('key', 'value', $minutes);

キャッシュの有効期限が切れた分の値として値を渡すだけでなく、PHP DateTimeのインスタンスを渡すことでキャッシュの有効期限を設定することもできます.
$expiresAt = Carbon::now()->addMinutes(10);

Cache::put('key', 'value', $expiresAt);
addメソッドは、対応するアイテムがキャッシュに存在しない場合にのみキャッシュに追加されます.このメソッドは、プロジェクトがキャッシュに追加された後、trueに戻ります.そうでなければfalseを返します.
Cache::add('key', 'value', $minutes);
foreverメソッドは、プロジェクトをキャッシュに永続的に追加するために使用することができる.この値は、forgetメソッドを使用して手動でのみ削除できます.
Cache::forever('key', 'value');

キャッシュからアイテムを除去するにはCacheマスクのforgetメソッドを使用して、キャッシュからアイテムを削除できます.
Cache::forget('key');
flushメソッドを使用して、すべてのキャッシュを消去できます.
Cache::flush();

消去キャッシュは、接頭辞に基づいてインテリジェントに消去されず、すべてのキャッシュが除去されます.アプリケーションと他のアプリケーションがキャッシュを共有している場合は、この方法を慎重に使用する必要があります.
キャッシュラベル
注:キャッシュラベルは、fileまたはdatabaseキャッシュドライバをサポートしていません.また、複数種類のラベルを永続的に記憶するようにマークする駆動については、memcachedのような期限切れの記録を自動的に消去できる駆動を提供することが望ましい.
マークされたアイテムをキャッシュに格納
キャッシュラベルを使用すると、関連するアイテムを関連付けてマークできます.指定したラベルのすべてのキャッシュ・アイテムを一度に消去できます.タグ付けされたキャッシュ・アイテムには、順序付けされたラベル配列でアクセスできます.たとえば、タグ付けされたアイテムにアクセスし、putメソッドを使用してキャッシュ値を設定します.
Cache::tags(['people', 'artists'])->put('John', $john, $minutes);

Cache::tags(['people', 'authors'])->put('Anne', $anne, $minutes);

実際には、putメソッドのみを使用することを制限されていません.ラベルに任意のキャッシュ・ストレージ・メソッドを使用できます.
タグ付けされたキャッシュ・アイテムへのアクセス
マークされたキャッシュ・アイテムにアクセスするには、tagsメソッドに対応するシーケンス・テーブルを渡す必要があります.
$john = Cache::tags(['people', 'artists'])->get('John');

$anne = Cache::tags(['people', 'authors'])->get('Anne');

割り当てられたタグまたはタグリストのすべてのアイテムを一度に消去できます.たとえば、flushメソッドを使用して、peopleauthorsのラベルと、シーケンスラベルからなるすべてのキャッシュ項目を削除できます.したがって、AnneおよびJohnは、キャッシュから除去されます.
Cache::tags(['people', 'authors'])->flush();

次の文は、上記の文の照合として使用され、authorsラベルのアイテムのみがキャッシュから削除されるため、Anneは削除され、Johnは保持されます.
Cache::tags('authors')->flush();

カスタムキャッシュドライバの追加
カスタムキャッシュドライバでlaravelのキャッシュを継承するために.カスタムキャッシュをレイヤ管理にバインドするために使用されるCacheマスクのextendメソッドを使用する必要があります.通常、これらはサービスプロバイダで完了します.
たとえば、新しいキャッシュドライバを登録して「mongo」と名前を付けます.
extendメソッドに最初に渡されるパラメータは、駆動の名前であるべきである.この名前は、config/cache.phpプロファイルのdriverオプションと一致するはずです.2番目のパラメータは、Illuminate\Cache\Repositoryの実装を返すべき閉パケットである.閉パッケージでは、laravel内のサービスコンテナのインスタンスである$appインスタンスが渡されます.Cache::extendメソッドの呼び出しは、App\Providers\AppServiceProviderbootメソッドで行われるべきである.あるいは、この拡張子を格納するために独自のサービスプロバイダを作成することができます.ただし、config/app.phpファイルに登録することを忘れないでください.
独自のキャッシュドライバを作成するには、まずIlluminate\Constracts\Cache\Store契約のインタフェースを実現する必要があります.だから、私たちのMongoDBキャッシュ実装はこのように見えるはずです.

これらの方法を実装するためにMongoDB接続を使用するだけです.実装が完了すると、独自のキャッシュドライバの登録を完了できます.
Cache::extend('mongo', function ($app) {
  return Cache::repository(new MongoStore); 
});

次に、config/cache.phpプロファイルで、ドライバ名driverが拡張子の名前であることを更新します.
カスタムキャッシュファイルをどこに保存すべきか疑問に思っている場合は、Packagistにパブリッシュすることを考えてみてください.または、appディレクトリにExtensionsネーミングスペースを作成できます.実際には、laravelはあなたのディレクトリ構造を制限していないことを覚えておいてください.あなたは自分の習慣に基づいてアプリケーションのディレクトリ構造を自由に管理することができます.
≪イベント|Events|ldap≫
キャッシュが操作されたときに追加のコードを実行したい場合は、キャッシュのトリガイベントを監視する必要があります.通常、これらのイベントリスナーをEventServiceProviderに保存する必要があります.
/**
 * The event listener mappings for the application.
 *
 * @var array
 */
 protected $listen = [
  'Illuminate\Cache\Events\CacheHit' => [
    'App\Listeners\LogCacheHit',
  ],
  'Illuminate\Cache\Events\CacheMissed' => [
    'App\Listeners\LogCacheMissed',
  ],
  'Illuminate\Cache\Events\KeyForgotten' => [
    'App\Listeners\LogKeyForgotten',
  ],
  'Illuminate\Cache\Events\KeyWritten' => [
    'App\Listeners\LogKeyWritten',
  ],
 ];