Redis永続化RDBとAOFの実装プロセス
前書き
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実行フロー
- すべてのコマンドはaof_buf(バッファ)に追加されます。
- AOFバッファは、対応するポリシーに従ってディスクへの操作を同期させる。
- AOFファイルが大きくなると、圧縮のために定期的にAOFを書き換える必要があること。
- Redisサーバーの再起動時に、AOFファイルを読み込んでデータ復旧が可能です。
3. 書き換えの仕組み
手動でトリガーをかける。
ブグライトアウフ
オートトリガー 以下の2つのパラメータをもとに、オートトリガーの仕組みを設定します。
オートアフリライト最小サイズ
自動書き換え率
Redisの永続的なRDBとAOFについての記事は以上です。Redisの持続的RDBとAOFの詳細については、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。
関連
-
redis の RedissonLock が待ちロックを実装する方法
-
redisプラグインbloom-filterをcentosにインストールする方法
-
Redisにおけるビットマップの説明
-
Redisで緯度・経度座標データを簡単に扱う方法
-
インタビューFAQです。Redisキャッシュとデータベース間のデータ整合性を確保する方法
-
Redisによる分散シングルナンバーと分散ID(カスタムルール生成)
-
redisを使ってnearly peopleの機能を実装する
-
Redisトランザクション処理の使用方法
-
RedisClusterが16,384個のスロットを持つ設計になっている理由
-
redis アプリケーション編 ---- スパイク、サインイン、セッション共有
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
RedisTemplatを使った簡単な分散ロックの実装の話
-
redisキャッシュストレージのセッション原理機構
-
redis分散ロックについて解説(redis分散ロックの最適化処理とRedissonの利用について)
-
redisクラスタ構築プロセス (非常に詳細、初心者向け)
-
Redis 3つのクラスターモードの説明
-
Redisは携帯電話の認証コードを送信する機能を模倣している
-
シングルスレッドのredisがなぜ速いのかの紹介
-
SpringBootがRedisの分散ロックを利用して並行処理の問題を解決することについて
-
インストール後、Redis-cliが動作しない(redis-cli: コマンドが見つからない)。
-
RedisTemplateでRedisを操作する、この記事で十分です(a)