Laravel は、Web 開発で広く使用されている人気のある PHP Web フレームワークです。そのクエリ ビルダーを使用すると、データベース クエリ、リポジトリ スキーマ、およびスタイルをエレガントな方法で構築できます。ただし、Laravel ORM のクエリは非常に遅くなる場合があり、アプリケーションのパフォーマンスに影響を与える可能性があります。この問題を解決する 1 つの方法は、Laravel のクエリ キャッシュを使用することです。この記事では、Laravelクエリキャッシュの概念とLaravelでの使い方を紹介します。
クエリ キャッシュとは何ですか?
クエリ キャッシュは、SQL クエリの実行時間を短縮するために使用できるキャッシュ テクノロジです。クエリ キャッシュでは、クエリが初めて実行されるときに結果がキャッシュされるため、後でクエリを繰り返し実行するときに、クエリを再実行せずにキャッシュから直接結果を取得できます。これにより、クエリの実行時間が大幅に短縮され、アプリケーションのパフォーマンスが向上します。
Laravel では、クエリ キャッシュはキャッシュ ドライバーを使用してクエリ結果を保存します。 memcached、Redis、ファイル キャッシュなどのキャッシュ ドライバーを選択できます。 Laravel は、キャッシュドライバーを簡単に使用できるシンプルな API も提供します。
Laravel クエリ キャッシュ構文
Laravel では、cache() メソッドを使用してクエリ キャッシュを実装できます。以下は、クエリ キャッシュを使用するための基本的な構文です。
$users = DB::table('users')
->where('name', 'John') ->cache(10) // 缓存10分钟 ->get();
上記の例では、最初に DB::table( ) メソッドを使用して、クエリ対象のデータベース テーブルを指定します。次に、where() メソッドを使用して制約を追加し、最後に get() メソッドを使用してクエリを実行します。同時に、cache() メソッドを使用してクエリ キャッシュを有効にし、キャッシュ時間を指定する時間パラメータを受け入れます。
クエリ キャッシュの構成方法
クエリ キャッシュを使用する前に、まずキャッシュ ドライバーを構成する必要があります。 Laravel は、ファイル キャッシュ、memcached キャッシュ、Redis キャッシュなど、さまざまなキャッシュ ドライバーをサポートしています。ニーズに基づいて適切なキャッシュ ドライバーを選択できます。この記事では、ファイル キャッシュを使用してデモを行います。
ファイル キャッシュを設定するには、config/cache.php ファイルを開くと、次の内容が表示されます:
return [
/* |-------------------------------------------------------------------------- | Default Cache Store |-------------------------------------------------------------------------- | | This option controls the default cache "store" that gets used while | using this caching library. This connection is used when another is | not explicitly specified when executing a given caching function. | | Supported: "apc", "array", "database", "file", "memcached", "redis", "dynamodb" | */ 'default' => env('CACHE_DRIVER', 'file'), /* |-------------------------------------------------------------------------- | Cache Stores |-------------------------------------------------------------------------- | | Here you may define all of the cache "stores" for your application as | well as their drivers. You may even define multiple stores for the | same driver to group types of items stored in your caches. | */ 'stores' => [ 'apc' => [ 'driver' => 'apc', ], 'array' => [ 'driver' => 'array', ], 'database' => [ 'driver' => 'database', 'table' => 'cache', 'connection' => null, ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), ], 'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => env('MEMCACHED_WEIGHT', 100), ], ], ], 'redis' => [ 'driver' => 'redis', 'connection' => 'cache', ], ], /* |-------------------------------------------------------------------------- | Cache Key Prefix |-------------------------------------------------------------------------- | | When utilizing a RAM based store such as APC or Memcached, there might | be other applications utilizing the same cache. So, we'll specify a | value to get prefixed to all our keys so we can avoid collisions. | */ 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
];
In上記の設定ファイルでは、「Laravel は複数のキャッシュドライバーをサポートしています」セクションを確認できます。 「ファイル」ドライバーは、ファイル システムを使用してキャッシュを保存します。 path オプションの値を変更して、キャッシュを保存するディレクトリを指定できます。デフォルトでは、すべてのキャッシュは storage/framework/cache/data ディレクトリに保存されます。
クエリ キャッシュ使用後の注意事項
クエリ キャッシュを使用する場合、注意すべき点がいくつかあります。まず、クエリ キャッシュは、クエリの実行後に結果を返すクエリにのみ役立ちます。 INSERT、UPDATE、DELETE クエリなど、データベースを変更するクエリを実行している場合、クエリ キャッシュは機能しません。次に、クエリ キャッシュは通常のクエリにのみ役立ちます。クエリにタイムスタンプや GUID などのランダムな要素が含まれている場合、クエリ キャッシュは機能しません。最後に、クエリ キャッシュは、クエリ結果がほとんど変更されない場合にのみ使用する必要があります。クエリ結果が頻繁に変更される場合、クエリ キャッシュを使用すると不正確な結果が得られる可能性があります。
結論
Laravel クエリ キャッシュは、SQL クエリの実行時間を短縮するための強力なツールです。大規模な Web アプリケーションを開発する場合、パフォーマンスの問題は常に懸念事項になります。 Laravel クエリ キャッシュを使用すると、アプリケーションのパフォーマンスが大幅に向上し、応答時間が短縮されます。クエリ キャッシュを実装するときは、これまでに説明した点と考慮事項に注意し、ニーズに応じて適切なキャッシュ ドライバーを選択してください。
以上がlaravelクエリキャッシュの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。