ホームページ  >  記事  >  バックエンド開発  >  Laravel での最適な Redis キャッシュ戦略: 高速かつ効率的なキャッシュへのガイド

Laravel での最適な Redis キャッシュ戦略: 高速かつ効率的なキャッシュへのガイド

DDD
DDDオリジナル
2024-11-12 09:29:02563ブラウズ

Best Redis Caching Strategy in Laravel: A Guide to Fast and Efficient Caching

Laravel と Redis は、アプリケーションの速度とパフォーマンスを向上させるための強力な組み合わせです。メモリ内キー/値ストアである Redis は、特に高速かつ頻繁なデータ アクセスが必要な場合のキャッシュに最適です。このガイドでは、Redis を使用した Laravel での効果的なキャッシュ戦略を見ていきます。データをキャッシュし、有効期限を管理し、キャッシュを効率的にクリアする方法について説明します。

Redis キャッシュを使用する理由
Laravel で Redis を使用してキャッシュすると、基本的に、データベースのクエリにかかる時間を短縮するためにデータを一時的に保存することになります。キャッシュにより、データの取得が高速化され、サーバーの負荷が軽減され、ページの読み込みが速くなることでユーザー エクスペリエンスが向上します。

Redis は次の理由からキャッシュに最適です。

  • データを迅速に保存および取得できます
  • 文字列、リスト、ハッシュなどのさまざまなデータ構造をサポート
  • キャッシュの有効期限を管理し、古いデータを消去するためのツールを提供します

Laravel で Redis キャッシュを最適に使用する方法を見てみましょう。
新聞サイトがあるとします。次に、ニュースを取得するための API を構築する必要があります。

1. Laravel と Redis を使用した基本的なキャッシュのセットアップ

まず、最新のニュース記事のリストなど、単純な API 応答をキャッシュしましょう。

$data = Cache::remember('latest_news', 3600, function () {
    return News::latest()->get();
});

この例では:
Cache::remember は、キー (latest_news) と 3600 秒 (1 時間) の存続時間 (TTL) を持つデータを保存します。
1 時間以内に再度、latest_news のリクエストが届いた場合、Redis はデータベースにクエリを実行せずに、キャッシュされたデータを提供します。

2. キャッシュキーと有効期限の構造化

Redis を過負荷にせずにデータを最新の状態に保つには:
頻繁に更新されるデータには短い TTL を設定します (例: 15 ~ 30 分)。
めったに変更されないデータには、より長い TTL (例: 1 ~ 2 時間) を使用します。

データの内容を反映する、特定の構造化されたキャッシュ キーを使用します。例:

$cacheKey = "news:category:category_1";

このキーは明確で一意であり、自己記述的であるため、Redis 内での識別と管理が簡単になります。

3. タグを使用したグループ化されたキャッシュ管理

Redis はタグをサポートしているため、グループ化されたデータを共通のタグで管理できます。たとえば、すべてのニュース関連のキャッシュにニュースをタグ付けします:

Cache::tags(['news', 'category'])->remember('category_news_1', 3600, function () {
    return $this->news_repository->getNewsByCategory(1);
});

ここで、(ニュースが更新されたときに) カテゴリ固有のニュース キャッシュをすべてクリアしたい場合は、以下を使用できます:

Cache::tags(['news', 'category'])->flush();
  1. ページ分割およびフィルタリングされたデータのキャッシュ ページネーションやフィルター (カテゴリやタグなど) を追加するときは、各キャッシュ キーをパラメーターに一意にします。
$page = request()->input('page', 1);
$limit = request()->input('limit', 10);
$cacheKey = "news:page_{$page}:limit_{$limit}";

$newsData = Cache::remember($cacheKey, 3600, function () use ($page, $limit) {
    return News::latest()->paginate($limit, ['*'], 'page', $page);
});

この方法:
ページと制限ごとに一意のキャッシュ エントリが作成されます。
ユーザーはデータベースに再クエリすることなく、ページをすばやくフェッチできます。

フィルターされたデータの場合、キーにフィルター パラメーターを含めます:

$data = Cache::remember('latest_news', 3600, function () {
    return News::latest()->get();
});

これにより、カテゴリとページの組み合わせごとに独自のキャッシュ エントリが確保されます。

5. データ変更時の自動キャッシュ無効化

キャッシュをクリアまたは「無効化」すると、ユーザーは必要に応じて更新されたデータを確認できるようになります。自動化する方法は次のとおりです:
作成、更新、削除などのイベントに対してモデル オブザーバーを使用して、関連するキャッシュをクリアします。
ニュースのオブザーバーの例:

$cacheKey = "news:category:category_1";

ニュースが追加または更新されるたびに、すべてのニュースとページネーションのタグ付けされたキャッシュがフラッシュされ、データが最新の状態に保たれます。

6. 概要とベストプラクティス

キャッシュを効果的に機能させるには:
固有のキー: カテゴリ、ページ、制限などのパラメーターを使用してキーを構造化します。
グループ化されたデータのタグ: タグを使用すると、特定のデータ グループのキャッシュを簡単に管理できます。
無効化の自動化: データ変更時に古いキャッシュをクリアするようにオブザーバーを設定します。
適切な有効期限を設定する: データが変更される頻度 (通常は 15 分から 1 時間) に基づいて TTL を選択します。

この構造化されたアプローチで Redis を使用すると、Laravel API の応答が速くなり、サーバーの負荷管理が改善され、管理が簡単で信頼性が高く効率的なキャッシュ戦略が保証されます。

以上がLaravel での最適な Redis キャッシュ戦略: 高速かつ効率的なキャッシュへのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。