日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

rdb文件是redis實(shí)現(xiàn)持久化方式的一種,即通過save或bgsave操作,執(zhí)行數(shù)據(jù)備份,生成的.rdb后綴的數(shù)據(jù)文件。

save和bgsave都是調(diào)用rdbSave實(shí)現(xiàn)備份的,只不過save是阻塞式,bgsave是非阻塞式,通過fork子進(jìn)程執(zhí)行備份,主進(jìn)程可以繼續(xù)接收外部請(qǐng)求。源碼如下:

一、save方法

直接調(diào)用rdbsave()方法

void saveCommand(client *c) {
 if (server.rdb_child_pid != -1) {
 addReplyError(c,"Background save already in progress");
 return;
 }
 rdbSaveInfo rsi, *rsiptr;
 rsiptr = rdbPopulateSaveInfo(&rsi);
 if (rdbSave(server.rdb_filename,rsiptr) == C_OK) {
 addReply(c,shared.ok);
 } else {
 addReply(c,shared.err);
 }
}

二、bgsave方法

調(diào)用的是rdbSaveBackground()方法

/* BGSAVE [SCHEDULE] */
void bgsaveCommand(client *c) {
 int schedule = 0;
 /* The SCHEDULE option changes the behavior of BGSAVE when an AOF rewrite
 * is in progress. Instead of returning an error a BGSAVE gets scheduled. */
 if (c->argc > 1) {
 if (c->argc == 2 && !strcasecmp(c->argv[1]->ptr,"schedule")) {
 schedule = 1;
 } else {
 addReply(c,shared.syntaxerr);
 return;
 }
 }
 rdbSaveInfo rsi, *rsiptr;
 rsiptr = rdbPopulateSaveInfo(&rsi);
 if (server.rdb_child_pid != -1) {
 addReplyError(c,"Background save already in progress");
 } else if (server.aof_child_pid != -1) {
 if (schedule) {
 server.rdb_bgsave_scheduled = 1;
 addReplyStatus(c,"Background saving scheduled");
 } else {
 addReplyError(c,
 "An AOF log rewriting in progress: can't BGSAVE right now. "
 "Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenever "
 "possible.");
 }
 } else if (rdbSaveBackground(server.rdb_filename,rsiptr) == C_OK) { #實(shí)際上調(diào)用的是rdbSaveBackground方法
 addReplyStatus(c,"Background saving started");
 } else {
 addReply(c,shared.err);
 }
}

三、rdbSaveBackground方法

int rdbSaveBackground(char *filename, rdbSaveInfo *rsi) {
 pid_t childpid;
 long long start;
 if (server.aof_child_pid != -1 || server.rdb_child_pid != -1) return C_ERR;
 server.dirty_before_bgsave = server.dirty;
 server.lastbgsave_try = time(NULL);
 openChildInfoPipe();
 start = ustime();
 if ((childpid = fork()) == 0) {
 int retval;
 /* Child */
 closeListeningSockets(0);
 redisSetProcTitle("redis-rdb-bgsave");
 retval = rdbSave(filename,rsi); # 最終調(diào)用的還是rdbsave()方法,但是是在子進(jìn)程中調(diào)用的
 if (retval == C_OK) {
 size_t private_dirty = zmalloc_get_private_dirty(-1);
 if (private_dirty) {
 serverLog(LL_NOTICE,
 "RDB: %zu MB of memory used by copy-on-write",
 private_dirty/(1024*1024));
 }
 server.child_info_data.cow_size = private_dirty;
 sendChildInfo(CHILD_INFO_TYPE_RDB);
 }
 exitFromChild((retval == C_OK) ? 0 : 1);
 } else {
 /* Parent */
 server.stat_fork_time = ustime()-start;
 server.stat_fork_rate = (double) zmalloc_used_memory() * 1000000 / server.stat_fork_time / (1024*1024*1024); /* GB per second. */
 latencyAddSampleIfNeeded("fork",server.stat_fork_time/1000);
 if (childpid == -1) {
 closeChildInfoPipe();
 server.lastbgsave_status = C_ERR;
 serverLog(LL_WARNING,"Can't save in background: fork: %s",
 strerror(errno));
 return C_ERR;
 }
 serverLog(LL_NOTICE,"Background saving started by pid %d",childpid);
 server.rdb_save_time_start = time(NULL);
 server.rdb_child_pid = childpid;
 server.rdb_child_type = RDB_CHILD_TYPE_DISK;
 updateDictResizePolicy();
 return C_OK;
 }
 return C_OK; /* unreached */
}

在了解rdb文件是怎么生成后,接下來就看看rdb文件內(nèi)容,rdb文件是二進(jìn)制格式的,直接打開是亂碼,可以使用命令 od -c xxx.rdb 查看

四、RDB文件內(nèi)容解析

本地先安裝redis吧(此處省略)

由于是之前安裝好的,此處執(zhí)行flushall命令情況redis數(shù)據(jù)庫

Redis RDB文件解析

分享到:
標(biāo)簽:Redis
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定