redis拾遺(四)——持続化のRDB

4405 ワード

前言


redisは非常に豊富なメモリデータ構造タイプをサポートしていますが、これらのメモリデータをディスクにどのように永続的に保存するかは簡単ではありません.Redisの永続化方法は従来のデータベースと比較して多くの違いがあり、現在Redisは2つの永続化方式をサポートしている.
RDB(タイミングスナップショット方式):データベースのスナップショットをディスクにバイナリで保存する
AOF(文に基づいてファイルを追加する方式):プロトコルテキストの方式で、データベースに書き込むすべてのコマンドをAOFファイルに記録し、データベースを記録する目的を達成する.
このブログでは、RDBの永続化方法について説明します.

トリガモード


手動トリガ


1、saveコマンド
クライアントからsaveコマンドを直接呼び出すと、現在のredisデータスナップショットがRDBファイルとして保存されます.しかし、この保存はブロックされています.この命令も基本的に廃棄された.
127.0.0.1:6379> save
OK

2、bgsaveコマンド
redisは、クライアントにとって非同期非ブロックの保存方法であるスレッドを開いてスナップショットファイルを保存します.
127.0.0.1:6379> bgsave
Background saving started

オートトリガ


自動トリガはredisに基づいている.confプロファイルのsave[m][n]のパラメータ構成は、具体的にはm秒以内にredisで発生したデータの変化回数がn回以上であればbgsaveを実行し、RDB持続化メカニズムをトリガすることを意味する.
save 900 1
save 300 10
save 60 10000

redisプロファイルには、いずれかを満たすとRDBのbgsaveがトリガーされる3つの構成が表示されます.
このほか,主従レプリケーション,shutdownコマンドの実行によりrdbの永続化操作も自動的に実行される.

save[m][n]原理


redisの内部には、現在のデータの変化回数と時間を一定時間ごとにチェックするタイマイベントがあります.上記のsave構成の関連パラメータを満たすと、redisはサブプロセスを開き、メモリ全体を巡ってストレージ操作を行います.プライマリ・プロセスは依然として正常にサービスを提供しています.
具体的な実装:serverCron関数、dirtyカウンタ、lastsaveタイムスタンプによって実装されます.
serverCronはredisサーバの周期的な関数で、デフォルトでは100 msごとに実行されます.この関数はサーバの状態を維持します.その1つのタスクはsave mn構成の条件が満たされているかどうかを確認し、満たされている場合はbgsaveを実行することです.
dirtyカウンタはredisサーバがこのための記録であり、前回bgsave/saveを実行した後、サーバ内のデータが何回変更されたかを記録する.bgsave/save以降、カウンタはクリアされます
Lastsaveはタイムスタンプで、前回bgsave/saveが成功した時間を記録します.

bgsaveプロセス


1.redis親プロセスは、現在実行中のbgsave/save操作が存在するか否かを判断し、存在する場合は直接返す
2、存在しない場合は、サブプロセスを作成します.サブプロセスはデフォルトで親プロセスと同じデータ空間を共有し、メモリ内のデータファイルを自進フィールドで遍歴します.これにより、スナップショットの生成中に新しい書き込み要求が発生し、データが一致しないという問題が解決されます.親プロセスがサブプロセスを作成するプロセスはブロックされます.
3、サブプロセスはRDBファイルを作成し、完了したら自動的にメインプロセスに通知する.
4、構成された圧縮スイッチの有無に応じて、生成されたRDBファイルを圧縮するか否かを決定する.

RDBファイル


redisでconfファイルには、RDBファイルの格納構成に関連するいくつかの項目があります.
一つはdir
## dir  ,  RDB          
dir ./

一つはdbfilename
## dbfilename,          
dbfilename dump.rdb

もう一つはrdbcompression
##   LZF   RDB      ,        ,        RDB     ,      
rdbcompression yes

RDBファイルの読み込み作業は、サーバの起動時に自動的に実行され、特別なコマンドはありません.しかし、AOFの優先度が高いため、AOFがオンの場合、RedisはAOFファイルを優先的にロードしてデータを復元する.AOFがオフの場合にのみ、Redisサーバの起動時にRDBファイルが検出され、自動的にロードされます.サーバがRDBファイルをロードする間、ロードが完了するまでブロックされます.RedisがRDBファイルをロードすると、RDBファイルが検証され、ファイルが破損するとログにエラーが印刷され、Redisの起動に失敗します.

コンフィギュレーション・アイテム


RDB永続化メカニズムはデフォルトでオンであり、save[m][n]構成が存在する限り、RDBの永続化メカニズムが自動的にオンになったことを示す.
## bgsave       ;    save m n  ,      RDB     ,                
save m n

##  bgsave     ,Redis         ;   yes,         ,      ,       ##   ;   no, Redis  bgsave          ,  Redis      (     )      ,##         no 
stop-writes-on-bgsave-error yes

##     RDB     
rdbcompression yes

##     RDB     ,               ;  checksum                10% ##     ,            
rdbchecksum yes

## RDB    
dbfilename dump.rdb

## RDB   AOF       
dir ./

RDBを閉じる操作は2種類あります
1、クライアントがRDBを閉じるとすぐに有効になる
##        save  ,    
config set save ""

2、コンフィギュレーションファイルの中でいつまでも閉じて、再起動した後に有効になる
#Save 900 1     
#Save 300 10   
#Save 60 10000  
Save ""

修正が完了したら、Redisサービスを再起動すればよい.

小結


RedisにおけるRDBの動作を簡単にまとめた

参考資料


大牛のredis持続化に対する総括実はこのブログは、この大牛ブログに対する自己学習の総括のようなものだ.