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を自動的に実行できるようにします.
次のように構成されています.
上記の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ファイルのみがロードされてデータが復元されます
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ファイルのみがロードされてデータが復元されます