Q1. 書き込みが多く、最終的な整合性が許容できるシナリオに最適なキャッシュパターンは?
A. Cache-Aside B. Read-Through C. Write-Through D. Write-Behind
答えを見る
正解: D
Write-Behind(Write-Back)は書き込みをキャッシュに即時反映し、DBへの永続化を非同期バッチで行う。書き込みスループットが高い代わりに、クラッシュ時のデータロス可能性がある。最終的な整合性で十分なユースケース(IoTデータ集約、ログ記録等)に適している。
Q2. Redis の Eviction ポリシーで、TTL が設定されたキーのみを対象に、アクセス頻度が低いものから削除するのは?
A. allkeys-lru B. allkeys-lfu C. volatile-lru D. volatile-lfu
答えを見る
正解: D
volatile-lfu は TTL が設定された(volatile な)キーの中から、LFU(Least Frequently Used = アクセス頻度が低い順)で削除する。永続データとキャッシュデータが共存する Redis インスタンスで、キャッシュデータのみを Eviction 対象にしたい場合に有効。
Q3. Cache-Control: public, max-age=0, s-maxage=300, stale-while-revalidate=600 の動作として正しいのは?
A. ブラウザは300秒キャッシュし、CDNはキャッシュしない B. ブラウザはキャッシュせず、CDNは300秒キャッシュし、600秒間staleデータを返せる C. ブラウザもCDNも300秒キャッシュする D. ブラウザは600秒キャッシュし、CDNは300秒キャッシュする
答えを見る
正解: B
max-age=0 によりブラウザキャッシュは無効(毎回再検証)。s-maxage=300 によりCDN(共有キャッシュ)は300秒キャッシュ。stale-while-revalidate=600 により、CDNキャッシュ失効後も600秒間はstaleデータを返しつつバックグラウンドでオリジンに再取得する。
Q4. Cache Stampede(サンダリングハード問題)の説明として正しいのは?
A. キャッシュサーバーのメモリが溢れてクラッシュする問題 B. キャッシュの TTL 失効時に大量のリクエストが同時にオリジンに殺到する問題 C. キャッシュキーの衝突により異なるデータが上書きされる問題 D. CDN とオリジンのデータが永久に不整合になる問題
答えを見る
正解: B
Cache Stampede は、人気のあるキャッシュキーの TTL が失効した瞬間に、多数のリクエストが同時にキャッシュミスとなり、一斉にオリジン(DB等)にアクセスして過負荷を引き起こす問題。防止策としてロック、PER(確率的早期再計算)、stale+バックグラウンド更新がある。
Q5. Redis Cluster のハッシュスロット数は?
A. 1,024 B. 4,096 C. 16,384 D. 65,536
答えを見る
正解: C
Redis Cluster は 16,384 個のハッシュスロットを持ち、各ノードがスロットの一部を担当する。キーの配置は CRC16(key) mod 16384 で決定される。ハッシュタグ {...} を使うことで、関連キーを同一スロットに配置できる。
Q6. CDN のオリジンシールド(Origin Shield)の主な目的は?
A. DDoS攻撃からオリジンを保護する B. 複数のエッジロケーションからのリクエストを集約し、オリジンへの負荷を削減する C. SSL/TLS の終端処理をオフロードする D. 画像の自動圧縮と変換を行う
答えを見る
正解: B
オリジンシールドはエッジロケーションとオリジンサーバーの間に位置するリージョナルキャッシュ。複数のエッジロケーションからのリクエストを集約することで、オリジンへのリクエスト数を大幅に削減する。キャッシュミス時も、オリジンシールドにヒットすれば高速に応答できる。
Q7. インプロセスキャッシュの欠点として最も重要なのは?
A. 実装が難しい B. マルチインスタンス環境でのデータ不整合 C. ディスク I/O がボトルネックになる D. セキュリティリスクが高い
答えを見る
正解: B
インプロセスキャッシュは各アプリケーションインスタンスのメモリ内に独立して存在する。そのため、あるインスタンスでデータが更新されても、他のインスタンスのキャッシュには反映されず、一時的なデータ不整合が発生する。Redis Pub/Sub 等で無効化を通知する仕組みが必要。
Q8. キャッシュの TTL にジッター(ランダムな揺らぎ)を加える理由は?
A. キャッシュヒット率を向上させるため B. セキュリティを強化するため C. 同時期のキャッシュ失効(Cache Stampede)を防止するため D. メモリ使用量を削減するため
答えを見る
正解: C
全てのキャッシュエントリが同じ TTL で同時に失効すると、一斉にオリジンへのリクエストが発生する(Cache Stampede の一因)。TTL にランダムな揺らぎを加えることで、失効タイミングを分散させ、オリジンへの負荷を平準化できる。例: 300秒 ± 10% → 270〜330秒。