【キャッシュアサイドパターン】

キャッシュアサイドパターン とは?

公開:
💡 「なければ取りに行く」自己管理型の棚

アプリケーション自身がキャッシュを管理し、キャッシュミス時にデータソースを参照してキャッシュに書き込む最も一般的なキャッシュ戦略。RedisやMemcachedと組み合わせて広く使われる。

📌 このページのポイント
キャッシュアサイドパターン アプリ キャッシュ (Redis等) データベース ①確認 HIT: 返却 MISS: ②DB参照 ③保存 フロー ①キャッシュ確認 HITで返却 ②MISS→DB参照 ③キャッシュ保存 TTLで期限切れになると次回アクセス時に再取得
キャッシュアサイドパターンのフロー(ヒット時・ミス時)
ひよこ ひよこ
ペンギン先生、キャッシュアサイドって何なの?
ペンギン先生 ペンギン先生
アプリがデータを取得するとき、まずキャッシュを確認して、あればそれを返す。なければDBに取りに行って、その結果をキャッシュに保存してから返すパターンだよ。
ひよこ ひよこ
じゃあ最初は必ずDBに取りに行くんだね!
ペンギン先生 ペンギン先生
そうだよ。これを「キャッシュミス」と言って、最初の1回はDBアクセスが発生するんだ。2回目以降はキャッシュから高速に返せるよ。
ひよこ ひよこ
キャッシュに入れたデータが古くなったらどうするの?
ペンギン先生 ペンギン先生
TTL(有効期限)を設定しておくのが一般的だよ。期限切れになったら自動で削除されて、次のアクセス時に再びDBから最新データを取ってキャッシュに入れ直すんだ。
ひよこ ひよこ
データを書き込んだときはキャッシュをどうするの?
ペンギン先生 ペンギン先生
よくある方法は「キャッシュを削除する」ことだよ。次に読むときにDBから最新値を取得してキャッシュに入れ直すから、整合性が保てる。書き込み時にキャッシュも更新するWrite-Throughという方法もあるけどね。
ひよこ ひよこ
Lazy Loadingって呼ばれることもあるって聞いたんだけど?
ペンギン先生 ペンギン先生
そうだよ。「必要になったときだけキャッシュに載せる」から遅延ロード(Lazy Loading)とも呼ばれるんだ。対して最初から全データをキャッシュに入れておくのはEager Loadingと言って、起動は遅いけどアクセスは速いというトレードオフがあるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「キャッシュアサイド」って出てきたら「アプリ自身がキャッシュを管理するパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cache-Aside」 = キャッシュアサイド(傍置き型)
💬 キャッシュを「傍(aside)に置いて」アプリが必要なときだけ参照・更新する仕組みで、RedisやMemcachedで最もよく使われるパターンだよ
← 用語集にもどる