サーバーキャッシュには多様な種類があり、それぞれのレイヤーや目的に応じて役割が異なります。 ここでは代表的なキャッシュ方式を体系的に整理し、使い方と特徴を詳しく解説します。
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, immutableETag,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 | クライアント側の体感速度改善 | 
キャッシュは多層的に組み合わせることで、オリジン負荷の削減・応答速度向上・コスト削減を実現できます。
用途に応じて適切に組み合わせることが重要です。
