キャッシュドライバーにデータベースを利用する


configuration

 悩み事

複数のサーバ間などでキャッシュを共有して使えるようにしたい

複数のサーバでキャッシュを利用する場合に、ファイルキャッシュでは他のサーバから利用する事は出来ません
データベースを介して複数のサーバ間でキャッシュを共有してみましょう

 解決方法

データベースキャッシュドライバーを利用します

まず app/config/cache.php のドライバーを変更します

'driver' => 'database',

次に、キャッシュを保存するテーブルをデータベースに作成します

$ mysql -u username -p
mysql> use mydatabase
mysql> create table cache (`key` varchar(255) not null, value text not null)
    -> expiration int not null, unique key (`key`));
mysql> exit

 アドバイス

このレシピでは、すでにデータベースがインストール済みで、
設定が済んでいるものと仮定しています

導入が済んでいない場合は
MySQLをインストールするMySQLドライバーの設定方法 をご覧ください

キャッシュに利用する接続先とテーブルを変更することができます
app/config/cache.phpで設定を変更します

'connection' => null,
'table' => 'cache',

app/config/database.phpで接続先が'mydb'、
キャッシュのテーブルが'mycache'の場合は、
app/config/cache.phpで次の様に指定します

'connection' => 'mydb',
'table' => 'mycache',

スキーマビルダーを使用してキャッシュテーブルを構築

Laravelのスキーマビルダーを利用して構築する場合は、次の様なコードになります

Schema::create('cache', function($table)
{
      $table->string('key')->unique();
      $table->text('value');
      $table->integer('expiration');
});

データベースドライバの制限

ファイルキャッシュドライバーと同様にCache::increment()Cache::decrement()は利用できません


Author:Chuck Heintzelman

Editor and Translator:Yuuki Takezawa