Redis学習のデータ持続化とデータリカバリ

3386 ワード

redisキャッシュは、データの永続化をサポートする操作です.つまり、メモリ内のデータをハードディスクに永続化することができ、データベースと似ています.これもredisとmemcacheの違いの一つです.
redisデータの永続化には、次の2つの方法があります.
(1)Snapshotting (RDB)
指定した間隔でデータセットのポイント・イン・タイム・スナップショット(point-in-time snapshot)を生成することも、redis永続化のデフォルトです.
(2)Append Only File (AOF)
サーバが実行するすべての操作コマンドを永続化し、サービス起動時にこれらのコマンドを再実行することでデータセットを復元します.
RDBの生成方式:
(1)コマンド実行による手動生成
SAVEとBGSAVEコマンドでデータを永続化し、RDBファイルを生成することができます.
SAVEコマンドは、現在のサービスのプロセスをブロックし、ブロック中にサーバはキャッシュデータの永続化が完了するまでコマンド要求を処理できません.
BGSAVEコマンドは、その名の通りバックグラウンドで実行され、現在のサービスをブロックすることなく、サブプロセスが派生し、サブプロセスがデータの永続化を担当し、親プロセスがコマンド要求を処理し続ける.
(2)構成による自動生成
redisでいいです.confプロファイルSNAPSHOTTINGプロファイルを見つけ、saveオプションを変更し、サーバが一定時間ごとにBGSAVEを自動的に実行できるようにします.
次のように構成されています.
################################ SNAPSHOTTING  #################################
#
# Save the DB on disk:
#
#   save  
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving at all commenting all the "save" lines.

save 900 1         //    900  ,           1 
save 300 10        //    300  ,           1 
save 60 10000      //   60  ,           10000 

# Compress string objects using LZF when dump .rdb databases?
# For default that's set to 'yes' as it's almost always a win.
# If you want to save some CPU in the saving child set it to 'no' but
# the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

# The filename where to dump the DB
dbfilename dump.rdb    //              

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
# 
# Also the Append Only File will be created inside this directory.
# 
# Note that you must specify a directory here, not a file name.
dir ./       //       

上記の3つのsave構成のいずれかを満たすと、redisは自動的にデータスナップショットを行い、ハードディスク(HDD)に永続化します.ユーザーは自分のニーズに合わせて構成できます.
上記の構成を見ると、サーバはどのようにしてキャッシュデータを何回修正したか知っていますか?その後、Redisサービスにはdirtyとlastsaveタイムスタンプがあることが分かった.
サーバがデータ変更コマンドを実行すると、dirtyカウンタの数値が更新されます.
Lastsaveは,前回サーバがBGSAVEコマンドを実行した時刻を記録するものであり,ここでは詳細には説明しない.
AOF
AOF永続化データは、Redisサービスのすべての操作コマンドを保存し、次回サービスを開始する際に、これらの操作コマンドを新たに実行することでキャッシュデータを復元します.
AOFファイルのリフレッシュには3つの方法があります.
(1)appendfsync always-修正コマンドを発行するたびにfsyncを呼び出してAOFファイルにリフレッシュします.非常に遅いですが、非常に安全です(2)appendfsync everysec-毎秒fsyncを呼び出してAOFファイルにリフレッシュします.すぐですが、1秒以内のデータが失われる可能性があります(3)appendfsync no-OSでリフレッシュします.redisはAOFをアクティブにリフレッシュしません.これが最も速いですが、セキュリティはデフォルトではありません.毎秒リフレッシュを推奨します.スピードと安全を両立させた
データ・リカバリ:
RDB
RDBがデータを復元する方法は、専用の操作コマンドが実行されず、redisサービスが起動すると、自動的にRDBファイルを検索してロードし、RDBファイルのロードが完了するまで指導します.
AOF
サーバが起動すると、AOFファイルに保存されているコマンドを読み込み、実行することによって、サーバが閉じる前のデータベース状態を復元します.具体的な手順は、(1)AOFファイルを読み込むことです.
(2)シミュレーションクライアントの作成
(3)AOFファイルからコマンドを読み込む
(4)アナログクライアントによるコマンド実行
(5)全てが完了するまで繰り返し読み出し、コマンドを実行する
RDBとAOF方式が同時に有効になっている場合、AOFが優先され、起動時にAOFファイルのみがロードされてデータが復元されます