トピック

サーバーキャッシュの全種類と使い方まとめ

  • このエントリーをはてなブックマークに追加

サーバーキャッシュには多様な種類があり、それぞれのレイヤーや目的に応じて役割が異なります。 ここでは代表的なキャッシュ方式を体系的に整理し、使い方と特徴を詳しく解説します。


OS レベルのキャッシュ

ページキャッシュ(ファイルシステムキャッシュ)

  • 仕組み: OS が一度読み込んだファイルをメモリ上に保持し、次回以降の読み込みを高速化します。
  • 用途: 静的ファイル(画像 / CSS / JS / HTML)の配信。
  • 使い方: 特別な設定は不要。Linux カーネルが自動で行います。
  • Nginx の最適化例:
    sendfile on;  # OSカーネルのページキャッシュを利用してゼロコピー送信
    tcp_nopush on;

Nginx レベルのキャッシュ

open_file_cache

  • 仕組み: ファイルの存在・ディレクトリ情報・ファイルディスクリプタをキャッシュ。
  • 用途: ファイルアクセス時の stat() システムコールを減らし、CPU 負荷を軽減。
  • 設定例:
    open_file_cache          max=10000 inactive=60s;
    open_file_cache_valid    120s;
    open_file_cache_min_uses 2;
    open_file_cache_errors   on;

proxy_cache(リバースプロキシキャッシュ)

  • 仕組み: 上流サーバーから取得したレスポンスをディスクに保存し、次回以降のリクエストに再利用。
  • 用途: API や動的ページの応答をキャッシュし、上流の負荷を削減。
  • 設定例:
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:200m inactive=7d max_size=10g;
    server {
      location / {
          proxy_pass http://app_backend;
          proxy_cache STATIC;
          proxy_cache_key $scheme$proxy_host$request_uri;
          proxy_cache_valid 200 1h;
          add_header X-Cache-Status $upstream_cache_status;
      }
    }

fastcgi_cache

  • 仕組み: PHP-FPM など FastCGI アプリケーションのレスポンスをキャッシュ。
  • 用途: WordPress サイトなどで DB / PHP 実行回数を削減。
  • 設定例:
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHP:100m inactive=60m;
    location ~ \.php$ {
      fastcgi_pass php_backend;
      fastcgi_cache PHP;
      fastcgi_cache_key $scheme$host$request_uri;
      fastcgi_cache_valid 200 10m;
    }

uwsgi_cache / scgi_cache

  • 仕組み: Python(uWSGI) / SCGI アプリケーションのレスポンスをキャッシュ。
  • 用途: Django / Flask サイトなどでの応答高速化に利用。

アプリケーションレベルのキャッシュ

アプリ内メモリキャッシュ

  • 仕組み: アプリケーションが内部で計算結果やデータを保持。
  • 用途: 設定値や一時的なレスポンスキャッシュ。
  • デメリット: 複数プロセス間で共有できない。

外部キャッシュサーバ(Redis / Memcached)

  • 仕組み: インメモリデータベースを利用してクエリ結果やセッションを保持。
  • 用途: DB アクセスを減らし高速化。セッションストアとしても利用可能。
  • :
    • Redis: 永続化も可能、リッチなデータ構造。
    • Memcached: 超軽量、高速キー・バリューキャッシュ。

データベースレベルのキャッシュ

クエリキャッシュ

  • 仕組み: SQL 文の結果をキャッシュ(MySQL の旧 query_cache は非推奨)。
  • 用途: 同一クエリの繰り返し実行を高速化。
  • 注意点: モダン環境ではアプリ側で Redis を使う方が主流。

バッファキャッシュ(InnoDB Buffer Pool / PostgreSQL Shared Buffers)

  • 仕組み: ディスクから読み込んだデータページをメモリに保持。
  • 用途: DB 内部のディスク I/O 削減。

CDN / エッジキャッシュ

  • 仕組み: 世界中のエッジサーバーにコンテンツをキャッシュし、ユーザーの近くから配信。
  • 用途: 静的アセット、画像、動画の高速配信とオリジン負荷削減。
  • 代表例: AWS CloudFront, Cloudflare, Akamai
  • 特徴:
    • 地理的に分散
    • DDoS 防御や TLS 終端機能も提供
    • 無効化(パージ)やエッジ関数の利用も可能

ブラウザキャッシュ(クライアント側)

  • 仕組み: ブラウザがレスポンスをローカルに保存。
  • 用途: 再ダウンロードを防ぎ、ユーザー体験を改善。
  • 主なヘッダ:
    • Cache-Control: max-age=31536000, public, immutable
    • ETag, Last-Modified
  • 注意点: ファイル名にバージョンやハッシュを含めるのが必須。

まとめ

種類 具体例 主な用途
OS キャッシュ ページキャッシュ 静的ファイルの高速読み込み
Nginx キャッシュ open_file_cache, proxy_cache, fastcgi_cache サーバーレイヤーでの再利用
アプリケーションキャッシュ 内部メモリ, Redis, Memcached クエリ・処理結果の再利用
DB キャッシュ Buffer Pool, Shared Buffers データベース I/O 削減
CDN キャッシュ CloudFront, Cloudflare 世界分散配信・オリジン保護
ブラウザキャッシュ Cache-Control, ETag クライアント側の体感速度改善

キャッシュは多層的に組み合わせることで、オリジン負荷の削減・応答速度向上・コスト削減を実現できます。
用途に応じて適切に組み合わせることが重要です。

  • このエントリーをはてなブックマークに追加

コメントを残す


*

CAPTCHA