やあ。Redisの世界へようこそ。
Redisは、その圧倒的な速さゆえに「メモリ上の儚い夢」のように思われがちだ。電源を切れば、すべてが消えてしまう。でも、実務で使う以上、そんな「儚い夢」では困るよね。
そこで登場するのが「永続化(Persistence)」だ。メモリという超高速な作業机の上の書類を、いかにして安全なキャビネット(ディスク)に保存するか。今日はその極意を、専門用語を極力使わずに解説しよう。
ここをクリアすれば、Redisの基本はもうバッチリだ。一緒に紐解いていこう。
—
1. Redisの永続化、二つの「流儀」
Redisには、データを保存する方法が大きく分けて2つある。
- RDB (Redis Database Backup): 「スナップショット」を撮る。
- AOF (Append Only File): 「操作の履歴」をすべてメモする。
これを例えるなら、「写真」と「日記」の違いだ。
RDB:定期的に「今の状態」を写真に撮る
RDBは、決まったタイミングでメモリの中身を丸ごとファイルに書き出す方法だ。「10分経ったら今の状態を写真に撮って保存する」ようなものだね。
- メリット: 非常に高速。ファイルがコンパクトで、復旧も一瞬だ。
- デメリット: 最後に写真を撮ってから、次の写真を撮るまでの間に停電すると、その間のデータは消えてしまう。
AOF:行った操作をすべて「日記」に書き込む
AOFは、Redisに対して「Aさんに100円送った」「Bさんを削除した」という命令を、すべて順番にログとして書き残していく方法だ。
- メリット: ほぼデータを失わない。非常に安全だ。
- デメリット: ログがどんどん長くなり、ファイルのサイズが大きくなる。復旧時にその日記を最初から最後まで読み直す必要があるため、起動が遅い。
—
2. 設定の極意:使い分けの指針
では、どう設定すればいいのか? 伝説のアーキテクトとしての僕のアドバイスはこうだ。
RDBの自動保存(スナップショット)
設定ファイル(`redis.conf`)には、こんな風に書く。
900秒(15分)以内に、最低1回でもデータが変わったら保存する
save 900 1
300秒(5分)以内に、最低10回データが変わったら保存する
save 300 10
60秒以内に、最低10000回データが変わったら保存する
save 60 10000
これは「守りの要」だ。システムが急に落ちた時のための保険として、最低限これだけは入れておくべきだね。
AOFの同期ポリシー(書き込みの鮮度)
AOFには、どれくらいの頻度でディスクに「同期(確定)」させるかという設定がある。
appendfsync everysec(おすすめ!)
1秒ごとにログを書き出す。
性能と安全性のバランスが最も良い「黄金比」だ。
- always: 書き込むたびに保存。超安全だが、最高に遅い。
- everysec: 1秒に1回保存。これが実務のスタンダード。
- no: OSにお任せ。一番早いが、運が悪いとデータが飛ぶ。
—
3. 先輩からのアドバイス:両方使うという選択肢
「どっちがいいの?」と聞かれたら、僕はこう答える。「両方使えばいい」。
実はRedisは、RDBとAOFを同時に有効にできる。
- 基本はAOFで細かく記録し、安全を確保する。
- 万が一の時の復旧を早めるために、定期的にRDBで大きなスナップショットを撮っておく。
これが、Redisを本番環境で使いこなすプロたちの「定石」なんだ。
—
まとめ:Redisと長く付き合うために
Redisの永続化設定は、「性能」と「安全性」のトレードオフだ。
- とにかく速くしたい? RDBをメインに使う。
- 一瞬のデータ欠損も許されない? AOFをしっかり運用する。
最初から完璧な設定を目指す必要はない。まずは `everysec` でAOFを回しつつ、RDBのバックアップを適度に取る。そこから、君のアプリケーションの性格に合わせて、少しずつチューニングしていけばいいんだ。
Redisはとても素直なツールだよ。設定の意味を理解してあげれば、期待以上のパフォーマンスで応えてくれるはずだ。
さて、次は君の番だ。まずは設定ファイルを覗いて、自分の手で書き換えてみるところから始めてみよう。応援しているよ!
コメント