見出し画像

Redis永続化設定忘れでデータが消失『Web/DBの話⑩』

再起動したら、
キャッシュもセッションも全部消えた
アプリは正常、Redisも起動している。
原因は Redisの永続化設定忘れ
Redisを「インメモリだから速い」というだけで使うと、
落ちた瞬間に中身はゼロになる。


冒頭の一言要約

Redisは“保存しないと消える”。
永続化設定を入れていないRedisは、揮発メモリそのもの。


症状(あるある)

  • サーバ再起動後にデータが空

  • Redis再起動でログインセッション全消失

  • 再起動前は問題なかった

  • DBには残っているがRedis前提の処理が壊れる

  • 障害対応で再起動したら被害拡大

  • 「キャッシュだから問題ないと思っていた」


原因と仕組み(なぜ起きるか)

  • RDB / AOF をどちらも有効にしていない

  • Redisを“キャッシュ専用”のつもりで本番投入

  • セッション/キュー/一時データをRedis依存

  • 永続化の違い(RDB/AOF)を理解していない

  • ディスク書き込みを嫌って設定を切った

  • 永続化ファイルの保存先を確認していない

Redisは
メモリが正、永続化はオプション
設定しない限り、
再起動=初期状態になる。


図:永続化なしRedisの挙動

[Redisメモリ]
   ├─ データ
   ├─ データ
   ├─ データ
        │
   (再起動)
        ▼
      空

切り分け(最短コース)

  1. 永続化設定の確認

    1. redis-cli CONFIG GET save redis-cli CONFIG GET appendonly

  2. RDB/AOF ファイル存在確認

    1. ls -lh /var/lib/redis

  3. 現在の役割確認

    • キャッシュだけか?

    • セッション・キューも載せているか?

  4. 再起動時の挙動確認

    • 再起動後にデータが戻るか

  5. ログ確認

    1. journalctl -u redis


今すぐ効く対処(テンプレ)

◆ RDB(スナップショット)有効化(例)

save 900 1
save 300 10
save 60 10000

→ 一定回数の更新で自動保存。


◆ AOF(追記ログ)有効化(推奨)

appendonly yes
appendfsync everysec
  • データ耐久性重視なら AOF

  • 性能と耐久性のバランスが良い


◆ 設定反映

systemctl restart redis

永続化前のデータは戻らない
これ以上失わないための設定。


恒久対策/再発防止チェックリスト

  • Redisの用途(キャッシュ/セッション/キュー)を明確化

  • 本番Redisは必ず永続化を有効化

  • RDB/AOF の方式を理解して選択

  • 永続化ファイルの保存先・容量を監視

  • 再起動テストで復元を確認

  • Redisを「消えて困る用途」に使う場合は冗長化

  • 設定変更時に耐久性への影響を確認

  • 障害対応手順に「Redis再起動時の注意」を明記


落とし穴(やりがちミス)

  • 「キャッシュだから大丈夫」と思い込む

  • セッションをRedisに置いていることを忘れる

  • RDBだけで十分だと誤解

  • 永続化ファイルのディスク容量を見ていない

  • 再起動で直す癖がそのまま事故につながる


まとめ(行動指針)

Redisは
速いが、放っておくと消える

用途を決める → 永続化を選ぶ → 再起動を想定する。
この3点を押さえるだけで、
Redis由来の“突然のデータ消失”は確実に防げる。

いいなと思ったら応援しよう!