スマホでよく見るサイトを開いたとき、「あれ、なんか今日は速くない?」って感じたことない?逆に「なんでこんなに遅いんだろ…」ってイライラしたこともあるよね。実はこの速さの違いには、キャッシュヒットっていう仕組みが大きく関係してるんだ。この記事を読めば、キャッシュヒットがなんなのか、どこで使われてるのか、なんで大事なのかがぜんぶわかるよ!
- キャッシュはよく使うデータを手元に置く仕組みで、キャッシュヒットはそこに「探してたデータがあった!」状態のこと
- キャッシュヒット率が高いほどデータの取得が速くなり、Webサイトやアプリのパフォーマンスが上がる
- キャッシュに見つからないとキャッシュミスになり、遠いサーバーやメモリから取得するので時間がかかる
もうちょっと詳しく
キャッシュヒットの仕組みを理解するうえで大事なのが「ヒット率(キャッシュヒット率)」という考え方だよ。これはつまり「全体のアクセスのうち、何割がキャッシュから取れたか」を表す数字のこと。たとえば100回アクセスして90回キャッシュから取れたなら、ヒット率は90%。ヒット率が高いほど、システムは速く動ける。逆にヒット率が低いと、毎回遠くのサーバーから取ってこなきゃいけないから遅くなる。Webサービスを運営してる会社のエンジニアは、このヒット率をどう上げるかをいつも考えてるんだよ。キャッシュに何を入れておくか、いつ更新するか、どのくらいの期間保持するかを工夫することで、ヒット率はぐっと上がるんだ。
ヒット率90%以上を目指すのが、パフォーマンス改善の基本目標!
⚠️ よくある勘違い
→ ブラウザのキャッシュだけが「キャッシュ」だと思いがちだけど、実はCPUの中やサーバー、アプリなど、あらゆる場所にキャッシュは存在する
→ CPU・ブラウザ・サーバー・CDNなど多層構造で存在しており、キャッシュヒットはそれぞれの場所で起きている
[toc]
キャッシュヒットって結局どういうこと?まず基本から
「探したらあった」それだけ
キャッシュヒットをひとことで言えば、「必要なデータをキャッシュから取り出せた状態」のこと。これだけ聞くとシンプルだよね。でも、なんでそれが大事なのかを理解するには、まず「キャッシュ」と「本来のデータ保管場所」の違いを知る必要があるよ。
コンピューターがデータを取りに行くとき、行き先はいくつかある。一番速いのはCPUのすぐそばにある「キャッシュメモリ」。次がパソコン本体の「メインメモリ(RAM)」。その次が「ストレージ(SSDやHDD)」。そして一番遠いのがインターネットの向こうにある「外部サーバー」だよ。
近いところからデータを取ってくるほど速い。これが基本原則。キャッシュは「一番近い場所」にデータをコピーして置いておくことで、いちいち遠くまで取りに行かなくて済むようにする仕組みだよ。
教科書を机に出しっぱなしにするのと同じ
毎日授業で使う数学の教科書、棚に戻すたびに取り出すのって地味に面倒くさいよね。だから「どうせ毎日使うし、机の上に出しておこう」ってするのが「キャッシュに入れる」行動とほぼ同じ。
次の日また数学の授業があるとき、机の上を見たら教科書がある。これがキャッシュヒット。棚に入れてたら取りに行く手間がかかる。これがキャッシュミスってイメージだよ。
コンピューターも同じで、「また使いそうなデータ」をキャッシュに入れておき、次回アクセス時にそこから取るだけでOKにしてるんだ。これがキャッシュヒットの本質だよ。
キャッシュヒットはどこで起きてる?身近な例で見てみよう
ブラウザキャッシュ:同じサイトを2回目に開いたとき
スマホやパソコンでWebサイトを開くとき、実はブラウザ(ChromeやSafari)が「前回見たときの画像やデータ」を一時的に保存してるんだ。これがブラウザキャッシュだよ。
初めてサイトを開いたとき、画像やデザインのファイルをインターネット経由でサーバーから全部ダウンロードしてくる。でも2回目に同じサイトを開くと、「あ、このデータ前に保存してたじゃん」って気づいてキャッシュから取ってくる。これがキャッシュヒット!だから2回目以降は速く表示されるんだよ。
逆に「キャッシュをクリア」すると、保存してたデータが消えちゃうから、次に開いたときはまた最初からダウンロードし直しになる。「キャッシュクリアしたらサイトが遅くなった」って感じたことない?あれはキャッシュミスが増えたからだよ。
CPUキャッシュ:コンピューターの頭の中で起きてること
パソコンの心臓部であるCPU(つまりコンピューターの脳みそのこと)にも、小さなキャッシュメモリが内蔵されてるんだ。L1・L2・L3という階層があって、L1が一番速くて一番CPU近く、L3が少し遠い。
CPUが計算するとき、使うデータをまずL1から探す。あればキャッシュヒット!なければL2、それでもなければL3、最終的にメインメモリ(RAM)へと順番に探していく。一番近いL1キャッシュからデータを取るのにかかる時間は約1ナノ秒(1秒の10億分の1)。でもメインメモリから取ってくると100ナノ秒かかることもある。100倍の差だよ。
ゲームやアプリがサクサク動くかどうかも、このCPUキャッシュのヒット率が大きく関係してるんだ。
CDN:世界中でキャッシュヒットを起こす仕組み
CDNっていうのはつまり「世界中にデータの中継地点を置いておくサービス」のこと。たとえばアメリカのサーバーで動いてるWebサイトを日本から見るとき、普通なら太平洋を越えてデータを取りに行かないといけない。でもCDNを使えば、日本国内にすでにコピーされたデータがあって、そこからキャッシュヒットで高速に取れるんだ。
YouTubeやNetflixが海外サービスなのにサクサク見られるのも、CDNのおかげでキャッシュヒットが起きてるからだよ。
キャッシュヒット率ってどう上げるの?
「何をキャッシュに入れるか」が勝負
キャッシュは容量に限りがあるから、何でもかんでも入れておけるわけじゃない。だから「よく使われるデータを優先してキャッシュに入れる」という工夫が必要なんだ。
たとえばニュースサイトで考えてみよう。トップページのロゴ画像は毎回表示されるから絶対キャッシュしたい。でも「速報ニュース」は数分おきに変わるから、古いデータをキャッシュしすぎると「古いニュースが表示される」という問題が起きる。こういうトレードオフ(つまり「得するかわりに何かを犠牲にするバランス関係」のこと)を考えながら、エンジニアはキャッシュの設定を調整してるんだよ。
TTL:キャッシュの「賞味期限」
キャッシュには「TTL(Time To Live)」という有効期限が設定できる。これはつまり「このデータはどのくらいの時間、キャッシュに置いといていいか」を決める設定のこと。
たとえば「このロゴ画像は1年間変わらないだろう」なら、TTLを365日に設定してキャッシュに長く置いておける。でも「このセール価格は毎日変わる」なら、TTLを1時間にして古い情報が表示されないようにする。TTLが短すぎるとキャッシュがすぐ消えてキャッシュミスが増える。長すぎると古い情報が表示される。このバランスを取るのがキャッシュ設計の腕の見せどころだよ。
LRUキャッシュ:「最近使ってないものは消す」ルール
キャッシュがいっぱいになったとき、新しいデータを入れるには古いデータを消さないといけない。このとき「どれを消すか」を決めるルールのことを「キャッシュ退去ポリシー」と言う。
よく使われるのがLRU(Least Recently Used)というルールで、これはつまり「一番最近使われていないものを優先して削除する」方式のこと。冷蔵庫に例えると、一番奥に押し込まれて忘れられてる食材を処分するイメージ。最近よく使うデータはキャッシュに残り続け、使わないものが自然と消えていく、賢い仕組みだよ。
キャッシュヒットがビジネスに与える影響
ページ表示速度とユーザーの離脱率
実はWebサイトの表示速度って、ビジネスにすごく大きな影響を与えてるんだ。Googleの調査によると、ページの読み込みが3秒以上かかると53%のスマホユーザーが離脱するって言われてる。半分以上がページを閉じてしまうってこと!
キャッシュヒット率を上げてページを速くすることは、単なる「技術の話」じゃなくて「お客さんを逃がさないための重要な施策」なんだ。ECサイト(通販サイト)では、表示速度が0.1秒速くなるだけで売上が数%上がることもある、という研究もあるくらいだよ。
サーバーへの負荷を減らす効果
キャッシュヒットが増えると、本来のサーバーへのアクセスが減る。これって地味に大事で、サーバーの負荷(つまり「サーバーにかかる処理の重さ」のこと)が減るということは、コストが下がってサービスが安定するということなんだ。
人気YouTuberの動画が公開されて一気にアクセスが増えたとき、サーバーがパンクして見られなくなることがある。でもCDNのキャッシュがうまく機能してれば、多くのアクセスをキャッシュヒットで処理できるから、サーバーが落ちにくくなる。大規模なサービスを支えてる裏側には、こういうキャッシュの工夫があるんだよ。
お金の節約にもなる
クラウドサービス(AWSやGoogleCloudなど、インターネット経由でサーバーを借りるサービスのこと)では、サーバーの処理量やデータ転送量に応じてお金がかかる。キャッシュヒット率が高いとサーバーの処理が減るから、コストを大幅に削減できるんだ。ヒット率を10%上げるだけで、月のサーバー代が数十万円安くなることもあるんだよ。
まとめ:キャッシュヒットはコンピューターの「賢い近道」
キャッシュヒットって、一言で言えば「賢い近道」のことだよ。毎回遠くまで取りに行くんじゃなくて、「また使いそうなものは手元に置いておく」というシンプルな発想が、コンピューターの世界でもWebサービスの世界でも、あらゆる場所に応用されてる。
ブラウザが速くなる、CPUがサクサク動く、Netflixがスムーズに見られる、すべてのところにキャッシュヒットの仕組みがある。エンジニアが「キャッシュヒット率を上げる」ために日々工夫してることが、ユーザーである僕たちの「速くて快適な体験」につながってるんだ。
キャッシュヒットに関係する用語まとめ
- キャッシュ(cache):よく使うデータを一時的に保管しておく仕組み・場所
- キャッシュヒット:キャッシュに探してたデータがあった状態
- キャッシュミス:キャッシュにデータがなく、遠い場所から取り直す状態
- キャッシュヒット率:全アクセスのうち何割がキャッシュから取れたかを示す割合
- TTL(Time To Live):キャッシュの有効期限
- LRU(Least Recently Used):最近使っていないデータを優先して削除するキャッシュ管理ルール
- CDN(Content Delivery Network):世界中にキャッシュサーバーを置いて高速配信する仕組み
