1. ホーム
  2. データベース
  3. レディス

Redis永続化RDBとAOFの実装プロセス

2022-01-15 08:23:22

前書き

RedisのパーシステンスはRDBとAOFの2つの方式をサポートしており、この記事ではその実装と設定についてドキュメントしています。

I. RDB

RDBの永続化とは、現在のプロセスデータのスナップショットを取り、ハードディスクに保存する処理です。

1. 保存コマンド

は、RDBが終了するまで現在のRedisサーバーをブロックします。これは、大量のデータやメモリを持つインスタンスに対して長時間ブロックすることになるので、本番環境では推奨されません。手動でsaveコマンドを実行すると、Redisは以下のようなログを記録します。

127.0.0.1:6379> save
OK

<ブロッククオート

* ディスクに保存されたDB

2. bgsaveコマンド

Redisプロセスはフォーク操作を行って子プロセスを作成し、RDB永続化処理は子プロセスが担当し、終了すると自動的に終了します。ブロックはフォークしている間のみ発生し、通常は非常に短い時間です。bgsaveコマンドを手動で実行すると、Redisは次のようにログを記録します。

* バックグランド保存を開始しました。
* DBをディスクに保存
* RDB:コピーオンライトによるメモリ使用量0MB
* バックグラウンドでの保存が成功裏に終了

<ブロッククオート

bgsaveは保存ブロッキングに最適化されており、RDBを含むRedis内部操作はbgsaveによって行われます。

3. 内部トリガーによるRDBシナリオ

  • などの保存関連の設定を使用します。 save m n は、m 秒間にデータセットに n 回の変更があった場合に、1 回だけ RDB を起動することを示します。
  • スレーブノードがフルレプリケーションを実行すると、マスターノードでは自動的にbgsaveが実行され、スレーブノードに送信するRDBファイルが生成されます。
  • を実行すると、Redisのデバッグ・リロードも本番用RDBをトリガーします。 デフォルトでは、AOFパーシステンスが有効でない場合、Redisをシャットダウンするためにshutdownを実行するとRDBがトリガーされます。

4. RDBパラメータの設定

dirを設定することでRDBの保存場所を設定できます。dbfilenameを設定することでファイル名を設定できます。

<ブロッククオート

config set dir /opt/redis-5.0.12/backup
config set dbfilename myback.rdb

RedisはデフォルトでLZFアルゴリズムを使用して、生成されたRDBファイルを圧縮するため、メモリサイズよりはるかに小さくなります。 is turned on by default であり、rdbcompression パラメータで設定することができます。

config set rdbcompression{yes|no}を設定します。

RDBの圧縮はCPUを消費しますが、保存やネットワーク経由でスレーブノードに送信する際のファイルサイズを劇的に小さくすることができます。

5. RDB のデメリット

RDBデータでリアルタイム/秒単位の永続化を行う方法がない。bgsaveは実行のたびにサブプロセスを作成するためにfork操作を行う必要があるため、頻繁に実行するにはコストがかかりすぎるヘビー級操作です。

RDBファイルは特定のバイナリ形式で保存され、Redisのバージョンアップに伴い複数の形式のRDBが存在するため、古いRedisサービスが新しいRDB形式に対応していない問題があります。

II. AOF

AOF(appendonlyfile)パーシスタンス。書き込みコマンドをそれぞれ別のログとして記録し、再起動時にAOFファイルのコマンドを再実行することでデータの復元を行う。

1. パラメータ設定

# Configure to enable AOF
config set appendonly yes
# Configure the file name, default appendonly.aof
config set appendfilename xxx.aof
# Storage location configuration, same as RDB
config set dir /opt/redis-5.0.12/backup


2. AOF実行フロー

  1. すべてのコマンドはaof_buf(バッファ)に追加されます。
  2. AOFバッファは、対応するポリシーに従ってディスクへの操作を同期させる。
  3. AOFファイルが大きくなると、圧縮のために定期的にAOFを書き換える必要があること。
  4. Redisサーバーの再起動時に、AOFファイルを読み込んでデータ復旧が可能です。

3. 書き換えの仕組み

手動でトリガーをかける。

ブグライトアウフ

オートトリガー 以下の2つのパラメータをもとに、オートトリガーの仕組みを設定します。

オートアフリライト最小サイズ
自動書き換え率

Redisの永続的なRDBとAOFについての記事は以上です。Redisの持続的RDBとAOFの詳細については、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。