追記専用ファイルは、Redisを強固にするオプションです。意味が分からない?では、一緒に観ていきましょう:
標準のRedisでは、データセットをDiskにバイナリでdump.rdbに保存します(初期設定の場合)。データセットに対して、60秒で100回変更が有った時、もしくわ1000秒で1回変更があった時にファイルに保存します、この設定は変更することも出来ます。この動作を”Snapshotting”と呼びます。
Snapshottingは、堅牢性が高いとは言えません。もし、あなたのPCでReidsが動いている最中に電源コードが抜けたら? もし、間違って”killall -9 redis-server”を間違って実行してしまったら?Redisに保存されている最新のデータセットは失われてしまいます。これは、アプリ側に取ってはうれしい話ではありません。There are applications where this is not acceptable and Redis was not an option for this applications.
その問題を解決する為に、Snapshottingに追記専用ファイルを使用します。使うためには?
データセットに変更があるたびに追記すると、ご想像の通りログファイルはドンドン大きくなります。”mykey”というキーにバリューを‘1’, ‘2’, ‘3’....と増やし提起‘100000000000’まで増やしていったときログファイルは数バイトですみます。
Redisは興味深い機能を持っています。追記型のログファイルのリビルドは、クライントからのコマンドプロセスを停止させずにバックグラウンドで動作います。
時間が経つに連れLogがドンドン大きくなってきます。たまにリビルドを行うことで安全に古いログを保管できます。(ただし、Ver1.1のベータの機能で提供されています)
基本的に、Snapshottingはいつもcopy-on-writeと同じような挙動をとります。
redis.confを見てみよう。あなたはいつでもコンフィギュレーションを変更できます、fsync()に関しては、3つのオプションがあります。
デフォルトの設定では”毎秒”が設定されています。それは、スピードと安全性でバランスの取れた設定です。”always”オプションはとても遅いのです。Redis2.0では、より速い実装が予定されています。
無いとは言えません。追記専用ファイルの書き込み時にサーバがクラッシュして、Redisで読み込み不能なファイルが作成された場合などです。もしこのような事態になった場合は以下の手順を試してください。
./redis-check-aof --fix <filename>