キャッシュ:定義とキャッシングが使われるすべての分野

公正取引委員会の広告文 Ver 3.1
公正取引委員会の広告文 Ver 3.2(モバイル専用)

キャッシュが使われる分野を、ハードウェアからウェブまでウィキペディア・MDN・WordPress公式ドキュメントの分類に合わせて1つのツリーにまとめました。CPU、オペレーティングシステム、データベース、ブラウザがすべて同じ名前を使うため、「消す」という言葉も、どの層かによって消える対象が変わります。

キャッシュは、よく使うデータやすぐに必要になるデータを元より速いストレージに一時的に保存しておき、同じリクエストが来ると元の代わりにそのコピーで応答します。

英語版ウィキペディアの Cache (computing) 記事は、キャッシュをCPUキャッシュ・GPUキャッシュのようなハードウェアキャッシュと、ディスク・ウェブ・DNS・データベースキャッシュのようなソフトウェアキャッシュに分けています。下のツリーはこの分類をキャッシュが置かれる場所ごとにまとめ、ウェブキャッシュはMDNのprivate cacheとshared cacheの分類に従いました。

🗂️ キャッシュが使われる分野
├─ 💻 Ⅰ. ユーザー端末
│ ├─ OSキャッシュディスクキャッシュ・DNSキャッシュ
│ ├─ ブラウザキャッシュHTTPキャッシュのprivate cache
│ └─ モバイルアプリのキャッシュサムネイル・セッションデータ
├─ 🖥️ Ⅱ. サーバー・アプリケーション
│ ├─ ページキャッシュ完成したHTML(WP Rocket・FastCGIキャッシュ)
│ ├─ OPcachePHPバイトコード
│ ├─ オブジェクトキャッシュRedis · Memcached
│ └─ ウェブフレームワークのキャッシュLaravel · Django
├─ 🌐 Ⅲ. コンテンツ配信・ネットワーク
│ ├─ CDNHTTPキャッシュのshared cache
│ ├─ プロキシキャッシュフォワード・リバース(Varnish)
│ └─ ネットワークキャッシュARPキャッシュ・DNSリゾルバーキャッシュ
├─ 🗄️ Ⅳ. データベース・ストレージ
│ ├─ DB内部キャッシュInnoDBバッファプール・Shared Buffers
│ └─ ストレージキャッシュディスクコントローラー・SSD DRAM
├─ ⚙️ Ⅴ. ハードウェア
│ ├─ CPUキャッシュL1 · L2 · L3 · TLB
│ └─ GPUキャッシュテクスチャ・シェーダーデータ
└─ ☁️ Ⅵ. クラウド・仮想化
├─ コンテナキャッシュDockerレイヤー
├─ サーバーレス関数Warm Start
└─ ビルドキャッシュCI/CDの依存関係・成果物

ブラウザ・CDN・サーバー内部キャッシュがWordPressのリクエスト1件を処理する順序は、 ウェブサイトキャッシュ&サーバー内部キャッシュ:WordPressでキャッシュが動く仕組み の記事のシミュレーターで確認できます。

Ⅰ. ユーザー端末

  • ↳ クライアントサイドキャッシュ

パソコンやスマートフォンのようなユーザー端末のキャッシュは、OSキャッシュ、ブラウザキャッシュ、モバイルアプリのキャッシュに分けられます。

オペレーティングシステム(OS)のキャッシュ端末のメモリ(RAM)
保存するものディスクから読んだデータ・ドメインとIPアドレス

ディスクキャッシュ(ページキャッシュ)はディスクから読んだデータをメモリに残し、オペレーティングシステムのカーネルが管理します。DNSキャッシュは最近照会したドメインとIPアドレスを保存します。

ディスクキャッシュDNSキャッシュ
ブラウザキャッシュブラウザのストレージ
保存するものHTML・CSS・JS・画像・フォント

同じリソースを再びリクエストするとき、サーバーまで行かないか、変更されたかだけを確認します。Service Worker(Cache API)を使うと、オフラインでも保存されたリソースでウェブアプリを開けます。

private cacheService Worker
モバイルアプリのキャッシュアプリのストレージ
保存するものサムネイル・コンテンツの一部・ログイン状態

大容量コンテンツを扱うアプリは、受け取ったデータと最近見たリストを端末に保存し、同じデータを再び受け取りません。

YouTubeInstagram

Ⅱ. サーバー・アプリケーションのキャッシュ

  • ↳ サーバーサイドキャッシュ

サーバー側のキャッシュは、リクエストがサーバーに届いた後、ページを作る過程に付くキャッシュです。WordPress公式ドキュメントは、これをキャッシュプラグイン(ページキャッシュ)、オブジェクトキャッシュ、サーバーキャッシュ(OPcacheのようなopcodeキャッシュ)に分けて説明しています。

ページキャッシュサーバーのディスク・メモリ
保存するもの完成したHTMLページ

同じページのリクエストには、PHPを実行せずに保存されたコピーを送ります。キャッシュプラグインとウェブサーバーのキャッシュがあります。

WP RocketNginx FastCGIキャッシュLiteSpeed Cache
OPcacheサーバーメモリ
保存するものコンパイル済みのPHPバイトコード

同じファイルを再び実行するとき、コンパイルを省きます。PHP 5.5から標準で含まれています。

opcodeキャッシュ
オブジェクトキャッシュサーバーメモリ
保存するものクエリ結果・セッション情報

よく使うデータをメモリストアに保存し、同じクエリを繰り返しません。

RedisMemcached
ウェブフレームワークのキャッシュアプリケーション
保存するものテンプレート・ルート・クエリ結果

ウェブフレームワークが、レンダリングしたテンプレートとクエリ結果を独自のキャッシュに保存します。

LaravelDjango

Ⅲ. コンテンツ配信/ネットワークインフラのキャッシュ

ネットワークインフラのキャッシュは、訪問者とオリジンサーバーの間でコピーで応答し、物理的な距離とオリジンサーバーの負荷を減らします。HTTPキャッシュ標準では、複数の訪問者が共有するshared cacheにあたります。

CDNエッジサーバー
保存するもの静的ファイル・ページ

世界中に分散したサーバーのうち、訪問者に最も近いサーバーから配信します。構造と利点は CDNとは?CDNを使う理由と5つの利点 の記事にあります。

CloudflareAkamaiFastlyQUIC.cloud
プロキシキャッシュプロキシサーバー
保存するものサーバーの応答

フォワードプロキシは企業ネットワークのようにクライアント側の前段で、リバースプロキシはサーバーの前段で応答を保存します。

Varnish CacheNginxリバースプロキシ
ネットワークキャッシュネットワーク機器・DNSリゾルバー
保存するものIPとMACアドレスの対応・DNS照会結果

ネットワーク機器はARPキャッシュに、通信事業者・公開DNSリゾルバーは照会結果をレコードのTTLの間保存します。

ARPキャッシュDNSリゾルバーキャッシュ

Ⅳ. データベース・ストレージシステムのキャッシュ

データベースとストレージはディスクの入出力が遅いため、よく読むデータをメモリに載せて使います。

データベース内部キャッシュDBサーバーのメモリ
保存するものよく読むデータ・インデックス

よく読むデータとインデックスをメモリに保持します。MySQLのクエリキャッシュは8.0で削除され、MariaDBには残っていますが標準ではオフです。

InnoDBバッファプールPostgreSQL Shared BuffersMongoDB WiredTiger
ストレージキャッシュストレージ内のメモリ
保存するもの最近の読み取り・書き込みデータ

ハードディスクのコントローラーに内蔵されたメモリとSSD内のDRAMがデータを一時的に保存し、入出力の遅延を減らします。

ディスクコントローラーキャッシュSSD・NVMe DRAM

Ⅴ. ハードウェアレベルのキャッシュ

ハードウェアキャッシュはCPUとGPUの中にある高速メモリで、メインメモリ(RAM)より速くデータを処理します。

CPUキャッシュプロセッサー内
保存するもの命令・データ・アドレス変換結果

L1はコアごとに別々にあり命令キャッシュとデータキャッシュに分かれ、L3はコア全体で共有します。メモリ管理ユニット(MMU)は仮想アドレスを物理アドレスに変換した結果をTLBに保存します。

L1L2L3TLB
GPUキャッシュグラフィックス処理装置内
保存するものテクスチャ・シェーダー命令・中間結果

ゲーム、3Dグラフィックス、機械学習の演算でGPUの処理効率を高めます。

Ⅵ. クラウド/仮想化環境のキャッシュ

クラウドと仮想化環境では、コンテナイメージ、関数の実行環境、ビルド成果物を再利用し、デプロイと実行の時間を短縮します。

コンテナキャッシュビルドサーバー・レジストリ
保存するものイメージレイヤー

Dockerイメージは複数のレイヤーで構成され、変更されていないレイヤーは再ビルドや再ダウンロードをしません。

Docker
サーバーレス関数クラウドの実行環境
保存するもの実行環境

呼び出しが終わった実行環境を一定時間保持し、次の呼び出しで再利用して初期化時間(Cold Start)を短縮します(Warm Start)。

AWS LambdaGoogle Cloud Functions
ビルドキャッシュCIのキャッシュストレージ
保存するもの依存ライブラリ・コンパイル成果物

繰り返しのビルド時間を短縮します。

GitHub ActionsGitLab CI

🔢 FAQ & おすすめコンテンツ

いいえ。ブラウザキャッシュを消すと、訪問者の端末に保存されたコピーだけが消えます。サーバーのページキャッシュとCDNのコピーは、サイト運営者がキャッシュプラグインやCDNの管理画面で消します。

消した直後の最初のリクエストはオリジンまで下りるため、普段より遅く応答します。そのリクエストがコピーを作り直すと次のリクエストから元の速度に戻り、WP Rocketの[プリロード]は消した後にコピーを先に作っておきます。

Windowsではタスクマネージャーの[パフォーマンス] → [CPU]画面の下にL1・L2・L3キャッシュの容量が表示されます。Linuxでは[lscpu]コマンドの結果で同じ値を確認できます。

💾 キャッシュ関連の記事 記事 10
🗂️ キャッシュ
📋 キャッシュ:定義とすべての分野 📄 ウェブサイトキャッシュ&サーバー内部キャッシュ
📋 WP Rocket設定ガイド 📝 Zend OPcache 📝 Redis Cache のインストール
📝 CDNとは? 📝 Varnish Cache
📋 WP Rocketの速度テスト 📝 速度改善の事例 📝 キャッシュ・最適化プラグイン

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 9   +   7   =