こんにちは! Redisの仕組みを突き詰めていくと、避けて通れないのが「データが消えないようにどうやって保存するか」という永続化の話だね。
今回は、その中でも「AOF(Append Only File)」という保存方式のキモ中のキモ、`auto-aof-rewrite-percentage`という設定について解説していくよ。
「難しそうな英語が出てきたな……」なんて身構えなくて大丈夫。ここさえクリアすれば、Redisの裏側の動きが手に取るようにわかるようになるから、一緒に楽しくマスターしていこう!
—
1. Redisの「メモ帳」:AOFとは何か?
まず、Redisが普段どうやってデータを覚えているかのおさらいから。
Redisは、超高速にデータを処理するために、すべてのデータをメモリ(RAM)の上で動かしている。ただ、メモリというのは「電気を切ると全部消えちゃう」という儚い性質を持っているんだ。
そこでRedisは、行った操作(「Aさんに100円追加」「Bというキーを削除」といった命令)を、まるで料理のレシピをメモするように、ファイルに順番に書き留めていく。これがAOF(Append Only File)という仕組みだよ。
日常の例え:お寿司屋さんの「注文伝票」
AOFは、まさにお寿司屋さんの注文カウンターにある伝票の束だと思ってほしい。
お客さんが「マグロ一丁!」「サーモン二皿!」と注文するたびに、店員さんが紙にどんどん書き足していくよね。これと同じで、Redisも命令を1行ずつひたすら後ろに書き足していく(Appendする)から、ファイルの名前が「Append Only File」なんだ。
—
2. 放置すると大惨事!?「伝票の束」が長すぎる問題
この注文伝票方式、非常にシンプルで確実なんだけど、大きな弱点がある。
それは、時間が経つにつれて伝票の束がどんどん分厚くなっていくことだ。
例えば、こんなやり取りがあったとするよ。
1. 「カウンターの数値を 0 にする」
2. 「カウンターに +1 する」
3. 「カウンターに +1 する」
4. 「カウンターを -1 する」
5. 「カウンターを ×10 する」
これをずっとファイルに記録し続けると、ファイル容量がパンクしてしまう。しかも、Redisを再起動してこのファイルを読み直すとき、過去の不要なやり取りも含めて最初から最後まで全部やり直さないといけないから、起動にもの凄く時間がかかるようになるんだ。
「おいおい、これじゃあ効率が悪すぎる。今の最終的な結果(この場合は『カウンターは10』)だけをスパッと綺麗にまとめた、新しい伝票を作れないものか?」
……そこで登場するのが、AOFの書き換え(Rewrite)という機能だよ。
—
3. 本日の主役:`auto-aof-rewrite-percentage` とは?
新しい綺麗な伝票にまとめる(書き換える)作業は、裏でコソコソと行う大掃除のようなもの。だから、システムが忙しいときにやるとちょっと負担がかかる。
「じゃあ、一体どのタイミングでその大掃除(書き換え)を始めればいいの?」
その絶妙なタイミングをRedisに教えてあげるための設定が、`auto-aof-rewrite-percentage` なんだ。
日本語に訳すなら「前回書き換えたときと比べて、ファイルサイズが何パーセント増えたら自動で書き換えを行うか」の閾値(しきいち)だよ。
日常の例え:お部屋の「ゴミ捨てのルール」
君が一人暮らしをしていて、こんなルールを自分に課したとする。
- 「部屋のダンボールが、前回片付けたときから『100%(2倍)』に増えたら、まとめて資源ごみに出す!」
これがまさに `auto-aof-rewrite-percentage 100` の状態だ。
1. 引っ越した直後、ダンボールが 10箱 あった(基準値:10箱)。ここでお部屋を綺麗に片付けた(Aofリライト完了)。
2. その後、荷物が届いてダンボールが 20箱 になった。
3. 前回(10箱)と比べて +100%(10箱増えて倍の20箱) になったので、「よし、そろそろ片付けよう!」と自動で大掃除が始まる。
Redisの `auto-aof-rewrite-percentage` も全く同じ。デフォルトでは大体 `100`(つまり前回の2倍のサイズになったら)に設定されていることが多いよ。
—
4. 設定ファイルの書き方と実際の挙動
実際のRedisの設定ファイル(`redis.conf`)を覗いてみよう。
前回の書き換え時と比較して、AOFファイルのサイズが100%増加したら自動書き換えを行う
auto-aof-rewrite-percentage 100
ただし、ファイルが小さすぎるうちから頻繁に書き換えるのは無駄なので、
最低でもこのサイズ(例: 65MB)を超えてから発動させるよ、という下限設定
auto-aof-rewrite-min-size 64mb
この2つの合わせ技で、Redisは賢く自動的にファイルを綺麗に保ってくれているんだ。
- パーセンテージ(例:100):前回のサイズからどれくらい肥大化したらやるか。
- ミニマムサイズ(例:64mb):そもそもファイルが小さいうちは発動させない安全弁。
—
5. 先輩エンジニアからの実践アドバイス
現場でRedisを運用する際、この設定をどうチューニングすべきか? 最後にプロの知見を少しだけ授けよう。
1. デフォルトのままで大体OK
Redisのデフォルト値(100や64mb)は、非常に多くの現場でテストされ尽くした「黄金のバランス」だ。まずはここから始めて、特に困ることはない。
2. メモリが大きい環境での注意点
例えば、メモリ上に数十GBもの巨大なデータを持つRedisサーバーの場合、パーセンテージが「100(2倍)」だと、書き換えが走る瞬間に一瞬ファイルサイズが膨れ上がり、ディスク容量を圧迫したり、CPUに負荷がかかったりすることがある。
そういう場合は、パーセンテージを少し高め(例えば `150` や `200`)に設定して、書き換えの頻度を減らすというアプローチをとることもあるよ。
—
まとめ
- AOF はRedisの「注文伝票(操作ログの記録)」。
- 放置すると長くなりすぎるので、定期的に綺麗にまとめる(書き換え)必要がある。
- `auto-aof-rewrite-percentage` は、「前回から何パーセントファイルが太ったら、そのお片付けを自動で始めるか」のパーセンテージ設定。
仕組みが分かってしまえば、もう怖くないよね。
ここをクリアできれば、君はもうRedisの裏側の動きを語れる立派なエンジニアだ。自信を持って、日々の開発や運用に活かしていこう!
コメント