1. 85 ヒット / 15 ミス -> 85.0%
  2. 1 ヒット / 1 ミス -> 50.0%
  3. 0 ヒット / 10 ミス -> 0.0%
  4. 10 ヒット / 0 ミス -> 100.0%
  5. 0 ヒット / 0 ミス -> 0.0%
コース一覧
コンピューターサイエンス入門:理論編
キャッシュヒット率

コンピューターサイエンス入門:理論編

2 進数、論理演算、ビット演算、データ構造、計算量、メモリモデルなど、プログラミングの土台となるコンピュータサイエンスの理論知識を学べるコースです。プログラミングを始めたばかりの学習者や、CS の体系的な土台を作りたい現役エンジニアを対象としています。約 13 時間 (1 日 30 分 × 26 日) で 53 レッスンを修了でき、修了後はコードのパフォーマンスや設計判断の根拠を理解した上で実装できるようになります。

1
2進数とビット演算
01. 2進数から10進数への変換5分
02. 10進数から2進数への変換5分
03. ビットAND演算でフラグ判定5分
04. OR / XOR でフラグを操作する5分
05. popcount で 1 のビット数を数える5分
06. シフト演算で 2 倍 / 半分5分
07. 16 進数から 10 進数への変換5分
08. 第 1 章まとめクイズ5分
2
文字コードと真偽値ロジック
01. 文字 → ASCII コード5分
02. コード → 文字5分
03. UTF-8 のバイト長を返す5分
04. AND / OR の真理値表5分
05. NOT / XOR の真理値表5分
06. 含意 (→) を AND/OR/NOT で表現5分
07. ド・モルガンの法則5分
08. 第2章まとめクイズ5分
3
計算量とBig-O
01. forループの実行回数を返す5分
02. 入れ子ループの実行回数5分
03. 線形探索 (O(n))5分
04. 二分探索 (O(log n))5分
05. バブルソート5分
06. 配列の最大と最小5分
07. 累積和で範囲合計5分
08. 第3章まとめクイズ5分
4
データ構造 (基本)
01. スタック (push/pop) を実装する5分
02. キュー (enqueue / dequeue) を実装する5分
03. カッコのバランス判定 (スタック応用)5分
04. set で重複を除去する5分
05. map で出現回数を数える5分
06. 二数の和 (map で O(n))5分
07. アナグラム判定5分
08. 第 4 章クイズ — データ構造 (基本)5分
5
ファイル / メモリ / IO 概念
01. バイト → KB 変換5分
02. ディスクサイズフォーマット5分
03. キャッシュヒット率5分
04. LRU 簡易シミュレーション5分
05. エンディアンの入れ替え (uint32)5分
06. バッファ範囲チェック5分
07. 第5章まとめクイズ5分
6
ネットワークと符号化
01. Base64 エンコード後の長さ計算5分
02. URL エンコード対象文字数5分
03. IPv4 アドレスを 32bit 整数に変換5分
04. 32bit 整数を IPv4 アドレスに変換5分
05. CIDR プレフィックスからネットマスクを作る5分
06. 単純チェックサム5分
07. 第6章まとめクイズ5分
7
設計と DB 基礎
01. 重複データを 1NF に変換 (フラットなリスト化)5分
02. キーで join (map 利用)5分
03. 残高転送のトランザクション風処理5分
04. CAP の availability 模擬5分
05. URL ルーティング5分
06. 疎結合と密結合 — 依存性注入で設計を変える12分
07. コース総まとめクイズ5分

キャッシュヒット率

キャッシュと古い表示

キャッシュを入れたら速くなった気がする、では次の判断ができません。置ける量を増やすのか、寿命を延ばすのか、そもそもキーの作り方が悪いのか。手を動かす前に、いま効いているかどうかを数字にします。

効いている気がする、では次が決められない

キャッシュは、一度取ってきたものを手元に置いておく仕組みです。次に同じものを聞かれたとき、手元にあればそれを返します。これが hit、無くて元まで取りに行くのが miss です。全部のアクセスのうち何回当たったかの割合がヒット率で、キャッシュの効きを語るときの共通の物差しになります。

当たった回数を、当たった回数と外れた回数の合計で割ります。そのままだと 0.75 のような比率になるので、100 を掛けてパーセントにします。人に見せる数字は 75 のほうが判断しやすく、監視の閾値も置きやすいからです。

Python

print(3 / 4) # 0.75 print(3 / 4 * 100) # 75.0

この割合は、CPU の中の小さなキャッシュから、ブラウザが持っている画像の控え、CDN の配信、DB の問い合わせ結果まで、どの層でも同じ式で測れます。層が違っても物差しが同じなので、どこが効いていないのかを並べて比べられます。

分母が 0 になる日がある

まだ一度もアクセスが来ていないとき、合計が 0 になります。Python は ZeroDivisionError で落ち、JavaScript は NaN を返します。落ちるほうがまだ幸せで、NaN は止まらずに画面やグラフまで運ばれていきます。

JavaScript

console.log(0 / 0); // NaN console.log(NaN === NaN); // false

しかも NaN は自分自身と比べても等しくならないので、後ろの処理で見つけて弾くのも面倒です。割り算に入る前に、分母が 0 のときは何を返すかを決めておきます。平均を出す関数でも、形はまったく同じです。

Python

def averageScore(scores): if len(scores) == 0: return 0.0 return sum(scores) / len(scores)

先頭の 2 行が、割り算を守る番人です。ここを書く癖が付いていると、割合を扱う関数で事故らなくなります。デプロイ直後やテスト環境のように、アクセスがまだ 1 件も無い状態は普通に訪れます。

85% でも遅いことがある

ヒット率は高いほうがよいのですが、それだけでは判断できません。外れたときの処理が重ければ、10 回に 1 回の miss が待ち時間の大半を占めます。ヒット率は、応答時間や元データへのアクセス数と並べて初めて意味を持ちます。

数字が下がったときに疑う先は、置ける量が足りない、置いたものがすぐ捨てられている、キーが細かすぎて同じ内容が別物として扱われている、のいずれかです。Redis なら INFO stats に当たりと外れの回数がそのまま出ているので、いま書いている割合の計算をそのまま当てはめれば、本番のヒット率が出せます。

要件

  1. cacheHitRate という名前の関数を実装すること
  2. ヒット率をパーセントで返すこと (100 倍する)
  3. hits + misses が 0 の場合は 0 を返すこと

入出力例

cacheHitRate(85, 15) → 85 cacheHitRate(1, 1) → 50 cacheHitRate(0, 10) → 0 cacheHitRate(10, 0) → 100 cacheHitRate(0, 0) → 0

ヒント

total = hits + misses を計算してから割る

0 除算を防ぐため if total == 0 のチェックを入れる

戻り値は数値 (Python の float、JS の Number)

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • LRU 簡易シミュレーション

    ページアクセス列から LRU 方式のキャッシュミス回数を求める

  • エンディアンの入れ替え (uint32)

    32bit 整数のバイト順を入れ替えてビッグエンディアンとリトルエンディアンを変換する

  • バッファ範囲チェック

    オフセットと長さが固定サイズバッファに収まるかを判定する

  • 第5章まとめクイズ

    バイト・KB変換、キャッシュ、LRU、エンディアン、バッファ範囲を総復習する4択クイズ

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • キャッシュ一度取得したデータを再利用するための一時保存
  • 判断YES/NO 分岐を表す菱形
  • ブラウザユーザーから見たWebのクライアント
  • CDN画像やCSSなどの静的ファイルを利用者に近い拠点から配信する仕組み。
  • JavaScriptWeb で動的な振る舞いを担う言語
  • グラフノード(頂点)とエッジ(辺)で構成されるデータ構造。
  • 処理計算や代入を表す長方形
  • 関数処理に名前を付けて再利用できる単位
main.py
学習モード
エディタを読み込んでいます

メモ

キャッシュヒット率

⌘S で保存