yanom blog

様々な技術について書きます

Redisの永続化について

最近、Redisについて調べているのでその結果を自分用にまとめておきます。

Redisの永続化方法については大きく以下2つがある。

  • RDB方式
  • AOF方式

それぞれのメリットデメリットは以下である。

RDB方式

特定の間隔毎にスナップショットを作成する方式。

  • メリット

    • RDBファイルは軽量でバックアップするには最適である。
    • 直近24時間は1時間毎にアーカイブファイルを作成し、直近30日については日毎にスナップショットを作成するなど、複数の保存方法が取れる。
    • RDBによる性能劣化はほとんどない。
  • デメリット

    • 例えば5分間に100件書込があった場合にアーカイブするといったことを行うため、Redisが停止した場合のデータロスを最小化したい場合は不向き。
    • 子プロセスを使って永続化処理を走らせるため、データ量が大きい場合かつ、CPU性能がそれほどではない場合、最悪1秒程度Redisが応答しなくなる場合がある。

AOF方式

サーバーが受け付けたすべての書き込みコマンドを記録する方式。

  • メリット

    • 耐障害性がRDBより優れている、例えば毎秒セーブする設定とした場合、最悪でも1秒のデータロスで済む。
    • その他にも、全ての書込をセーブする事もできる。(性能は当然劣化する)
    • バックアップファイル等でのデータ破損はほぼない
    • ファイルが肥大化してきても自動でリライトしてくれる。
  • デメリット

    • 同じデータ量である場合、RDB方式よりもAOF方式のほうがバックアップファイルのサイズは大きくなる。
    • 保存設定によってはRDBよりも性能が劣ることがある
    • ごく稀にバグ潜んでいる可能性がある

どうすればよいのか

  • PosgreSQL等の安全性を確保したい場合、AOFとRDBの両方を併用することが推奨されている。
  • データ量が多く、数分のデータロスが許容できる場合はRDBのみを使うと良い。
  • 一方、AOFのみの使用は推奨しない。

参考

Redis Documentation (Japanese Translation) - REDIS の永続化