今回はデータベースキャッシュドライバを使用してcacheの概要をつかみます。
背景
業務でLaravelを使っていてキャッシュについて触れることがあったので、今回キャッシュについて勉強します。
こちらで検証しました。
キャッシュ(cache)とは
取得したデータを一時的に保存する仕組みです。
同じデータに対するその後のリクエストでそこから取得することで素早いレスポンスを実現できます。
キャッシュされたデータは通常、MemcachedやRedisといった非常に高速なデータストアに保存されます。
キャッシュの設定
設定ファイルはconfig/cache.php
です。
アプリケーション全体でデフォルトのキャッシュストアを指定できます。
Laravelのキャッシュストア
- Memcached
- Redis
- DynamoDB
- リレーショナルデータベース等
- ファイルベースのキャッシュドライバ
- テスト用に使用するもの
デフォルトではデータベースキャッシュドライバ
*を使用するように設定されています。
*データベースを使用したキャッシュの仕組み
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache store that will be used by the
| framework. This connection is utilized if another isn't explicitly
| specified when running a cache operation inside the application.
|
*/
'default' => env('CACHE_STORE', 'database'),
今回はデータベースキャッシュドライバを使用します
キャッシュデータを格納するデータベーステーブルを作成する
Laravelではフォルトで0001_01_000001_create_cache_table.php
というマイグレーションファイルが作成されています。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('cache', function (Blueprint $table) {
$table->string('key')->primary();
$table->mediumText('value');
$table->integer('expiration');
});
Schema::create('cache_locks', function (Blueprint $table) {
$table->string('key')->primary();
$table->string('owner');
$table->integer('expiration');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cache');
Schema::dropIfExists('cache_locks');
}
};
ない場合は以下で作成できます。
php artisan make:cache-table
キャッシュに保存する
10秒後に期限が切れるキャッシュを作成します。
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Cache;
Route::get('/', function () {
Cache::put('key', 'value', $seconds = 10);
return view('welcome');
});
cacheテーブルに以下のレコードが追加されました
key | value | expiration |
---|---|---|
key | s:5:"value"; | 1731198618 |
10s後、期限切れになってもキャッシュのレコードは残っています。
以下にその理由をまとめていますのでご覧ください。
有効期限切れのキャッシュのレコードは自動的には削除されません。
取得時(getメソッド)に有効期限切れかチェックされ、有効期限が切れていれば削除されます。
Laravelのデータベースキャッシュドライバは、期限切れのキャッシュを自動的に削除しない
キャッシュを取得する
以下を実行すると、"value"
が取得されました。
Cache::get('key')
"value"
キャッシュを削除する
Cache::forget('key');
最後に
- cacheの概要を掴めました
- redis,memcachedについても勉強したいです
- cache_locksテーブル、cacheのlockについても勉強します