RedisRDBの運用と保守および原則

コンソールコマンド:

  • このコマンドを実行して保存すると、メインスレッドがブロックされ、メインスレッドが外部サービスを提供できなくなります。次の公式文書は意図したとおりです。saveコマンドは、すべてのデータセットを同期的に保存し、それらをRDBファイルに保存する操作を実行します。実稼働環境では、すべてのクライアントをブロックするため、このコマンドを使用して操作することは望ましくありません。通常、実稼働環境ではBGSAVEコマンドに置き換えられます。フォークでシステムコールエラーが発生した場合は、saveコマンドをダンプデータの最後のオプションとして使用できます。コマンドが正常に実行されると、OKが返されます。
    ここに画像の説明を挿入します

  • bgsaveはこのコマンドを実行して子スレッドをフォークし、メインスレッドは引き続き外部にサービスを提供できます。公式ドキュメントの主なアイデアは次のとおりです:バックグラウンドでデータを保存します。通常、OKコードはすぐに返され、redisは子プロセスをフォークし、親プロセスは引き続きサービスを提供し、子プロセスはDB保存作業を行います。次の2つの状況でエラーが返されます。①現在実行中のフォークプロセスがすでに存在します。②現在のAOFが書き込み動作を実行しています。コマンドが実行されるとすぐに戻ります。LASTSAVEコマンドを使用して、bgsaveが正常に実行されたかどうかを確認できます。
    ここに画像の説明を挿入します
    構成ファイルのRDB戦略。実際、savaは構成ファイル内のbgsaveを識別するために使用されます。プログラムは基本的に実行時にsaveコマンド操作を使用しないためです。

#15分钟有一个键值被修改
save 900 1
#5分钟至少10个键值被修改触发RDB
save 300 10
#一分钟至少10000个键值被修改触发RDB
save 60 10000
#当异步保存出错是是否停止
stop-writes-on-bgsave-error yes
#是否启用rdb文件压缩
rdbcompression yes
#是否校验和
rdbchecksum yes
#文件名称
dbfilename dump.rdb
#文件路径
dir /home/redis/redis-cluster/RDB/

bgsaveの原理:
bgsaveが実行されると、システムコールが発生します。Forkは現在のプロセスの子プロセスを作成し、現在のプロセスのすべてのメモリポインタを子プロセスにコピーします。特定のメモリコピーは発生していません。コピーオンライト(コピーオンライト)メカニズムを使用して、親プロセスが引き続き外部にサービスを提供するようにします。キー値が変更されると、システムは現在のキー値のメモリアドレスを再割り当てします。元のKey-Valueポインターが指す場所の内容は変更されないため、データの適時性が保証されます。フォーク呼び出しが発生すると、システムは最初にシステムへのメモリ要求を開始します。現在のスレッドが3 Gのメモリを使用しているが、システムに4 Gのメモリしかない場合は、保護のために3Gのメモリを申請する必要があります。フォークプロセスが発生したとき。完全に信頼できる状態ですが、システムメモリが不足している場合、システムはredisにエラーを返します。現時点では、コピーオンライトメカニズムが使用されているため、stop-writes-on-bgsave-error noと組み合わせてオペレーティングシステムのメモリ戦略を構成して、強制的にスキップすることができます。これは、最も極端な状況が発生し、メモリが発生するためです。この極端な状況はほとんど不可能です。
カーネルパラメータovercommit_memoryは
、0、1、2の1つのオプション値に設定されます。

  • 0は、カーネルがアプリケーションプロセスに十分な使用可能なメモリがあるかどうかをチェックすることを意味します。十分な使用可能なメモリがある場合、メモリアプリケーションは許可されます。そうでない場合、メモリアプリケーションは失敗し、エラーがアプリケーションプロセスに返されます。
  • 1は、現在のメモリ状態に関係なく、カーネルがすべての物理メモリの割り当てを許可することを意味します。
  • 2は、カーネルがすべての物理メモリとスワップスペースの合計を超えるメモリの割り当てを許可することを意味します。

おすすめ

転載: blog.csdn.net/a807719447/article/details/110959523