Laravel基本チュートリアル-キャッシュ
10484 ワード
キャッシュ
コンフィギュレーション
Laravelは複数のキャッシュシステムに対して統一的なAPIを提供している.キャッシュされたプロファイルは
キャッシュされたコンフィギュレーション・ファイルには、ファイルにドキュメント・コメントがある追加のコンフィギュレーション・オプションも含まれています.これらのオプション・コメントをすでに読んでいることを確認してください.デフォルトでは、Laravel構成では
キャッシュの前提条件
データベース#データベース#
Memcached
Memcachedキャッシュを使用するには、Memcached PECLパッケージをインストールする必要があります.
デフォルトの構成は、Memcached::addServerでTCP/IPを使用します.
UNIXソケットパスを使用して
Redis
Redisキャッシュを使用する前に、
キャッシュの使用
キャッシュインスタンスの取得
実際には、
たとえば、
複数のキャッシュ・ストレージへのアクセス
保存猶予の取得
アイテムが存在するかどうかを確認
増減項目の値
キャッシュ内のアイテムの取得または更新
キャッシュからアイテムを取得したい場合がありますが、アイテムが存在しない場合は、デフォルト値をアイテムに保存したい場合があります.たとえば、キャッシュからユーザーを取得します.しかし、彼は存在しないので、データベースから彼を取得し、キャッシュに追加する必要があります.
キャッシュに取得されていない場合、
取得と削除
アイテムを検索し、検索しながらキャッシュから削除する必要がある場合は、
アイテムをキャッシュに保存
キャッシュの有効期限が切れた分の値として値を渡すだけでなく、PHP
キャッシュからアイテムを除去するには
消去キャッシュは、接頭辞に基づいてインテリジェントに消去されず、すべてのキャッシュが除去されます.アプリケーションと他のアプリケーションがキャッシュを共有している場合は、この方法を慎重に使用する必要があります.
キャッシュラベル
注:キャッシュラベルは、
マークされたアイテムをキャッシュに格納
キャッシュラベルを使用すると、関連するアイテムを関連付けてマークできます.指定したラベルのすべてのキャッシュ・アイテムを一度に消去できます.タグ付けされたキャッシュ・アイテムには、順序付けされたラベル配列でアクセスできます.たとえば、タグ付けされたアイテムにアクセスし、
実際には、
タグ付けされたキャッシュ・アイテムへのアクセス
マークされたキャッシュ・アイテムにアクセスするには、
割り当てられたタグまたはタグリストのすべてのアイテムを一度に消去できます.たとえば、
次の文は、上記の文の照合として使用され、
カスタムキャッシュドライバの追加
カスタムキャッシュドライバでlaravelのキャッシュを継承するために.カスタムキャッシュをレイヤ管理にバインドするために使用される
たとえば、新しいキャッシュドライバを登録して「mongo」と名前を付けます.
独自のキャッシュドライバを作成するには、まず
これらの方法を実装するためにMongoDB接続を使用するだけです.実装が完了すると、独自のキャッシュドライバの登録を完了できます.
次に、
カスタムキャッシュファイルをどこに保存すべきか疑問に思っている場合は、Packagistにパブリッシュすることを考えてみてください.または、
≪イベント|Events|ldap≫
キャッシュが操作されたときに追加のコードを実行したい場合は、キャッシュのトリガイベントを監視する必要があります.通常、これらのイベントリスナーを
コンフィギュレーション
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
を設定することもできます.そうするには、port
を0
に設定する必要があります.'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
メソッドに渡された閉パケットは実行され、その実行結果はキャッシュに置き換えられます.remember
とforever
の方法を統合することもできます.$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
メソッドを使用して、people
とauthors
のラベルと、シーケンスラベルからなるすべてのキャッシュ項目を削除できます.したがって、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\AppServiceProvider
のboot
メソッドで行われるべきである.あるいは、この拡張子を格納するために独自のサービスプロバイダを作成することができます.ただし、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',
],
];