Appearance
TTL の判断 ― 600秒。60秒にしたら?
KeyTerms
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| TTL | Time To Live(キャッシュの有効期限) | キャッシュの古さを制御する最重要パラメータ |
| キャッシュ ヒット率 | キャッシュ内にデータが存在する確率 | TTLが短いほど低下し、DBへの負荷が増える |
| キャッシュ ミス | キャッシュが無効化されてデータソースから取得する場合 | TTLによってミス頻度が決まる |
| データ鮮度 | データがリアルタイム情報にどれだけ近いか | TTLが長いほど低下する |
| Cache::remember() | 存在確認→キャッシュ→保存をワンステップで行うLaravelメソッド | LIBOT のキャッシュ実装の基本 |
Prerequisite
- キャッシュの基本概念: データソース(API、DB)から取得した結果を一時保存し、再利用することで応答速度を改善する仕組み
- テーブルの読み方: TTLが短い vs 長い時の各メトリクスの変化を対比できること
- トレードオフの思考: 2つの相反する要件(速度 vs 鮮度)のバランスを取る必要があることを理解している
Phase 1: 観察
exemplar
php
// LineCouponService.php(キャッシュ部分の概要)
// Label: exemplar
$cacheKey = "line_coupons:{$botId}";
$ttl = config('line_coupon.cache_ttl', 600); // デフォルト10分
return Cache::remember($cacheKey, $ttl, function () use ($bot) {
// キャッシュミス → LINE API からクーポン一覧を取得
return $this->fetchCouponsFromLineApi($bot);
});Cache::remember() は:
- キャッシュにデータがあれば、それを返す(高速)
- なければ、クロージャを実行してキャッシュに保存してから返す
Phase 2: 判断
AI禁止ゾーン
- TTL を 60 秒 にしたら何が変わりますか? 3600 秒(1時間) だったら?
- TTL 0 秒(キャッシュしない)と TTL 無限、それぞれの問題は?
- このケースで 600 秒 は適切な値ですか?
AIに聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります