コンテンツにスキップ

Redis はディスクにデータを永続化しないは間違い:面接でよく出る誤解

問題

Interviewer: How does Redis persist data to disk? Candidate: "Redis is in-memory, it doesn't persist data"

What's wrong here?

解答

Redis には2つのディスク永続化メカニズムがある。「インメモリだから永続化しない」は誤り。

解説

Redis の永続化方式

1. RDB(Redis Database Backup)

# redis.conf
save 900 1       # 900秒以内に1件以上の変更があればスナップショット
save 300 10      # 300秒以内に10件以上の変更があれば
save 60 10000    # 60秒以内に10000件以上の変更があれば
  • 特定の時点のデータをスナップショットとしてダンプ(.rdb ファイル)
  • バックグラウンドで fork() してノンブロッキングに実行
  • メリット: 起動が速い、ファイルサイズが小さい
  • デメリット: スナップショット間のデータは失われる(最大数分のロスト)

2. AOF(Append Only File)

# redis.conf
appendonly yes
appendfsync everysec   # 毎秒フラッシュ(推奨)
# appendfsync always   # 書き込みごと(安全だが遅い)
# appendfsync no       # OSに任せる(速いが危険)
  • 全ての書き込みコマンドをログファイルに追記
  • 再起動時にコマンドを再生してデータを復元
  • メリット: データロストを最小化(最大1秒分)
  • デメリット: ファイルが大きくなる、起動が遅い

3. RDB + AOF の併用(推奨)

# redis.conf
appendonly yes
save 900 1

両方有効にすると、Redis は起動時に AOF を優先して読み込む。

比較表

項目 RDB AOF
データロストリスク 分単位 最大1秒
ファイルサイズ 小さい 大きい(rewrite で圧縮可)
起動速度 速い 遅い
用途 バックアップ 耐障害性重視

面接でのポイント

  • 「Redis はインメモリ DB だが、永続化オプションがある」と明確に言えること
  • RDB と AOF の違い(スナップショット vs ログ追記)を説明できること
  • それぞれのトレードオフ(速度 vs 耐障害性)を把握していること
  • appendfsync everysec が一般的なバランス設定であることを知っていること
  • Redis をキャッシュ専用で使う場合は永続化を無効にすることもあると補足できると加点