設定

Laravelは多くのキャッシュシステムに統一したAPIを提供しています。キャッシュの設定はconfig/cache.phpで設定します。アプリケーション全体でデフォルトとして使用するキャッシュドライバーをこのファイルの中で指定します。MemcachedRedisなど、人気のあるキャッシュシステムを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();
});

更にrememberforeverを一緒に使うこともできます。

$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以外の全ドライバーで、incrementdecrement操作をサポートしています。

値の増加

Cache::increment('key');

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

値の減少

Cache::decrement('key');

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

キャッシュタグ

注目:キャッシュタグはfiledatabaseキャッシュドライバーにはサポートされていません。さらに"forever"で保存されているキャッシュに多くのタグを使用する場合、古いレコードを自動パージするmemcachedのようなドライバーで最高のパフォーマンスが出せるでしょう。

タグ付けしたキャッシュへアクセス

キャッシュタグにより、キャシュの中のアイテムをタグに関連付けることができるだけでなく、名前を指定しタグ付けした全キャッシュを消去することもできます。タグ付けしたキャッシュにアクセスするには、tagsメソッドを使用して下さい。

タグ付けしたキャッシュに保存するには、順序に沿って、引数にタグ名のリスト、もしくは配列を渡します。

Cache::tags('people', 'authors')->put('John', $john, $minutes);

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

rememberforeverrememberForeverを含め、全キャッシュ保存メソッドとタグを組み合わせて利用できます。また、incrementdecrementのようなその他のキャッシュメソッドも同様に、タグ付けしたキャッシュのアイテムへアクセスできます。

キャッシュ中のタグ付きアイテムへアクセス

タグ付けしたキャシュへアクセスするには、保存したのと同じ順番でタグのリストを渡してください。

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

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

名前、または名前のリストを指定し、タグ付けしたアイテムを全部消去できます。例えば、次のコードにより、peopleauthors、またはその両方にタグ付けされた全キャッシュ済みアイテムが削除されます。ですから、"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設定を参照してください。