如果同时配置写AOF和RDB两种文件,但在redis启动时,只会加载AOF,除非配置只写RDB,才会加载RDB文件,也因此AOF文件必须是全量数据,所以会越来越大,这缺点也将是redis优化的一个方向,即AOF只保存相对于RDB的增量,这样AOF文件将大大减小。相关源码如下所示:
-
int main(int argc, char **argv) {
-
。。。
-
if (!server.sentinel_mode) {
-
loadDataFromDisk(); // 从磁盘加载数据到内存
-
}
-
。。。
-
}
-
-
/* Function called at startup to load RDB or AOF file in memory. */
-
void loadDataFromDisk(void) {
-
long long start = ustime();
-
if (server.aof_state == AOF_ON) {
-
// 加载AOF文件
-
if (loadAppendOnlyFile(server.aof_filename) == C_OK)
-
serverLog(LL_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000);
-
} else {
-
// 加载RDB文件
-
if (rdbLoad(server.rdb_filename) == C_OK) {
-
serverLog(LL_NOTICE,"DB loaded from disk: %.3f seconds",
-
(float)(ustime()-start)/1000000);
-
} else if (errno != ENOENT) {
-
serverLog(LL_WARNING,"Fatal error loading the DB: %s. Exiting.",strerror(errno));
-
exit(1);
-
}
-
}
-
}
阅读(3326) | 评论(0) | 转发(0) |