設定
Laravelは多くのキャッシュシステムに統一したAPIを提供しています。キャッシュの設定はconfig/cache.php
で設定します。アプリケーション全体でデフォルトとして使用するキャッシュドライバーをこのファイルの中で指定します。MemcachedやRedisなど、人気のあるキャッシュシステムをLaravelは最初からサポートしています。
キャッシュ設定ファイルは、様々な他のオプションを含んでいます。コメントで説明してありますので、よく読んで確認してください。Laravelのデフォルトでは、file
キャッシュドライバーが設定されています。ファイルシステムにオブジェクトをシリアライズして保存します。大きなアプリケーションでは、MemecachedやAPCのような、メモリに保存するキャッシュを使用することをおすすめします。
LaravelでRedisキャシュを使用する場合、predis/predis
パッケージ(~1.0)をComposerでインストールしておく必要があります。
キャッシュの使用
キャッシュへアイテムを保存
Cache::put('key', 'value', $minutes);
Carbonオブジェクトを有効日時として設定
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
存在していなければ、キャッシュにアイテムを保存
Cache::add('key', 'value', $minutes);
add
メソッドは本当にキャッシュに追加した場合のみtrue
を返します。それ以外の場合はfalse
を返します。
キャッシュ中の存在チェック
if (Cache::has('key'))
{
//
}
キャッシュからアイテム取得
$value = Cache::get('key');
アイテムを一つ取得するかデフォルト値取得
$value = Cache::get('key', 'default');
$value = Cache::get('key', function() { return 'default'; });
アイテムを永久に保存
Cache::forever('key', 'value');
場合により、キャッシュからアイテムを取得するとき、それが存在しない場合にはデフォルト値を保存したいこともあるでしょう。それにはCache::remember
メソッドを使用できます。
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
更にremember
とforever
を一緒に使うこともできます。
$value = Cache::rememberForever('users', function()
{
return DB::table('users')->get();
});
キャッシュには全アイテムがシリアライズして保存されることに注目してください。ですからどんなタイプのデーターでも自由に保存できます。
キャッシュからのアイテム取り出し
キャッシュからあるアイテムを引き出し、その後削除したい場合は、pull
メソッドを使用します。
$value = Cache::pull('key');
キャッシュからアイテム消去
Cache::forget('key');
特定のキャッシュ保存域へアクセス
複数のキャッシュ保存域を使用している場合、store
メソッドによりアクセスできます。
$value = Cache::store('foo')->get('key');
増減操作
database
以外の全ドライバーで、increment
とdecrement
操作をサポートしています。
値の増加
Cache::increment('key');
Cache::increment('key', $amount);
値の減少
Cache::decrement('key');
Cache::decrement('key', $amount);
キャッシュタグ
注目:キャッシュタグは
file
とdatabase
キャッシュドライバーにはサポートされていません。さらに"forever"で保存されているキャッシュに多くのタグを使用する場合、古いレコードを自動パージするmemcached
のようなドライバーで最高のパフォーマンスが出せるでしょう。
タグ付けしたキャッシュへアクセス
キャッシュタグにより、キャシュの中のアイテムをタグに関連付けることができるだけでなく、名前を指定しタグ付けした全キャッシュを消去することもできます。タグ付けしたキャッシュにアクセスするには、tags
メソッドを使用して下さい。
タグ付けしたキャッシュに保存するには、順序に沿って、引数にタグ名のリスト、もしくは配列を渡します。
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags(['people', 'artists'])->put('Anne', $anne, $minutes);
remember
、forever
、rememberForever
を含め、全キャッシュ保存メソッドとタグを組み合わせて利用できます。また、increment
とdecrement
のようなその他のキャッシュメソッドも同様に、タグ付けしたキャッシュのアイテムへアクセスできます。
キャッシュ中のタグ付きアイテムへアクセス
タグ付けしたキャシュへアクセスするには、保存したのと同じ順番でタグのリストを渡してください。
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(['people', 'authors'])->get('John');
名前、または名前のリストを指定し、タグ付けしたアイテムを全部消去できます。例えば、次のコードにより、people
かauthors
、またはその両方にタグ付けされた全キャッシュ済みアイテムが削除されます。ですから、"Anne"と"John"両アイテムはキャッシュから削除されます。
Cache::tags('people', 'authors')->flush();
その一方、次のコードではauthors
タグ付けされたキャッシュだけが削除されるため、"John"は削除されますが、"Anne"は残ります。
Cache::tags('authors')->flush();
イベントキャッシュ
キャッシュの全操作ごとにコードを実行する必要があるならば、キャッシュにより発行されるイベントを購読してください。
Event::listen('cache.hit', function($key, $value) {
//
});
Event::listen('cache.missed', function($key) {
//
});
Event::listen('cache.write', function($key, $value, $minutes) {
//
});
Event::listen('cache.delete', function($key) {
//
});
データベースキャッシュ
database
キャッシュドライバーを使う場合、キャッシュアイテムを保存するテーブルを用意する必要があります。テーブル宣言を行うSchema
の一例です。
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Memcachedキャッシュ
Memcachedキャッシュを使用するためには、Memcached PECLパッケージをインストールする必要があります。
デフォルト設定では、Memcached::addServerに基づいたTCP/IPを使用します。
'memcached' => array(
array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),
host
オプションにUNIXソケットパスを指定することも可能です。その場合、port
オプションに0
を指定してください。
'memcached' => array(
array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),
),
Redisキャッシュ
Redis設定を参照してください。