ソース分析:redisのRDB持続化方式
1610 ワード
rdbスナップショットの保存には、saveとbgsaveの2つの方法があります.
同じ点:
スナップショット保存のためにrdbSave関数が呼び出されます.
相違点:
(1)SAVEはrdbSaveを直接呼び出し,保存が完了するまでRedisメインプロセスをブロックする.プライマリ・プロセスがブロックされている間、サーバはクライアントの要求を処理できません.(2)BGSAVEは、rdbSaveを呼び出し、保存が完了した後にメインプロセスに信号を送信し、保存が完了したことを通知するサブプロセスをforkが出力する.rdbSaveはサブプロセスで呼び出されるので、Redisサーバは、BGSAVEの実行中にクライアントの要求を処理し続けることができる.
次はbgsaveの適用シーンです.
1.redisのプロファイルはrdbを開くように設定でき、m秒でn回変更が発生した場合はrdbファイルの保存を行う.
redisサーバ起動後は主に時間イベントでserverCron関数を実行して条件チェックを行い、条件が満たされたらrdbファイル保存を行う.
(1)サブプロセスを開始することによりrdbファイルの生成と保存を行う.ファイルの保存中は、プライマリ・プロセスがブロックされずに正常にサービスを提供できます.
(2)生成されたrdbファイルは,サブプロセスが開始された時点でredisメモリデータのスナップショットであるため,aof方式のデータよりもファイル内容が古い.したがってrdbとaof方式の両方がオンの場合、aofファイルが優先的にロードされます.
(3)rdbはメモリスナップショットの完全な保存である.したがってrdbスナップショットの保存操作は頻繁に行うべきではない.
2.redisのプライマリ・スレーブ・レプリケーション・モードもbgsave方式を採用し、rdbスナップショットをスレーブ・サーバに送信してバックアップを行う.
ps:覚えやすいのは腐ったペンに及ばない!
同じ点:
スナップショット保存のためにrdbSave関数が呼び出されます.
相違点:
(1)SAVEはrdbSaveを直接呼び出し,保存が完了するまでRedisメインプロセスをブロックする.プライマリ・プロセスがブロックされている間、サーバはクライアントの要求を処理できません.(2)BGSAVEは、rdbSaveを呼び出し、保存が完了した後にメインプロセスに信号を送信し、保存が完了したことを通知するサブプロセスをforkが出力する.rdbSaveはサブプロセスで呼び出されるので、Redisサーバは、BGSAVEの実行中にクライアントの要求を処理し続けることができる.
次はbgsaveの適用シーンです.
1.redisのプロファイルはrdbを開くように設定でき、m秒でn回変更が発生した場合はrdbファイルの保存を行う.
redisサーバ起動後は主に時間イベントでserverCron関数を実行して条件チェックを行い、条件が満たされたらrdbファイル保存を行う.
/* If there is not a background saving/rewrite in progress check if
* we have to save/rewrite now */
// , RDB
for (j = 0; j < server.saveparamslen; j++) {
struct saveparam *sp = server.saveparams+j;
if (server.dirty >= sp->changes &&
server.unixtime-server.lastsave > sp->seconds) {
redisLog(REDIS_NOTICE,"%d changes in %d seconds. Saving...",
sp->changes, sp->seconds);
rdbSaveBackground(server.rdb_filename);
break;
}
}
注:赤い部分は以下の点を示しています.(1)サブプロセスを開始することによりrdbファイルの生成と保存を行う.ファイルの保存中は、プライマリ・プロセスがブロックされずに正常にサービスを提供できます.
(2)生成されたrdbファイルは,サブプロセスが開始された時点でredisメモリデータのスナップショットであるため,aof方式のデータよりもファイル内容が古い.したがってrdbとaof方式の両方がオンの場合、aofファイルが優先的にロードされます.
(3)rdbはメモリスナップショットの完全な保存である.したがってrdbスナップショットの保存操作は頻繁に行うべきではない.
2.redisのプライマリ・スレーブ・レプリケーション・モードもbgsave方式を採用し、rdbスナップショットをスレーブ・サーバに送信してバックアップを行う.
ps:覚えやすいのは腐ったペンに及ばない!