欢迎投稿

今日深度:

Redis数据持久化机制AOF原理分析之配置详解

Redis数据持久化机制AOF原理分析之配置详解


if (!strcasecmp(argv[0],"appendonly") && argc == 2) {
	int yes;
	if ((yes = yesnotoi(argv[1])) == -1) {
		err = "argument must be 'yes' or 'no'"; goto loaderr;
	}
	server.aof_state = yes ? REDIS_AOF_ON : REDIS_AOF_OFF;
}

appendfsync everysec  支持延迟fsync
# appendfsync no      不需要fsync
config.c中解析代码

if (!strcasecmp(argv[0],"no-appendfsync-on-rewrite") && argc == 2) {
	if ((server.aof_no_fsync_on_rewrite= yesnotoi(argv[1])) == -1) {
		err = "argument must be 'yes' or 'no'"; goto loaderr;
	}
}
server.aof_no_fsync_on_rewrite控制该机制的实现代码在aof.c的flushAppendOnlyFile函数中,具体代码为

//如果不支持fsync,或者aof rdb子进程正在运行,那么直接返回,
//但是数据已经写到aof文件中,只是没有刷新到硬盘
if (server.aof_no_fsync_on_rewrite &&
	(server.aof_child_pid != -1 || server.rdb_child_pid != -1))
		return;

auto-aof-rewrite-min-size 64mb

server.aof_state = REDIS_AOF_OFF;            //AOF文件是否开启
server.aof_fsync = REDIS_DEFAULT_AOF_FSYNC;  //fsync策略,默认为每秒fsync
server.aof_no_fsync_on_rewrite = REDIS_DEFAULT_AOF_NO_FSYNC_ON_REWRITE;//aof rdb子进程运行中是否支持fsync,即写入AOF文件后,将数据刷新到硬盘
server.aof_rewrite_perc = REDIS_AOF_REWRITE_PERC; //自动rewrite增量值
server.aof_rewrite_min_size = REDIS_AOF_REWRITE_MIN_SIZE; //AOF文件最小字节数
server.aof_rewrite_base_size = 0;   //自动rewrite计算aof文件增量的基数,等于上一次aof文件的字节数
server.aof_rewrite_scheduled = 0;   //rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待AOF子进程结束后执行rewrite
server.aof_last_fsync = time(NULL); //最近fsync数据到硬盘时间
server.aof_rewrite_time_last = -1;  //rewrite持续的时间
server.aof_rewrite_time_start = -1; //rewrite开始的时间
server.aof_lastbgrewrite_status = REDIS_OK; //rewrite后的状态
server.aof_delayed_fsync = 0; //延迟fsync到硬盘的次数
server.aof_fd = -1;   //AOF文件描述符
server.aof_selected_db = -1; /* Make sure the first time will not match */
server.aof_flush_postponed_start = 0; //上次推迟fsync到硬盘的时间
server.aof_rewrite_incremental_fsync = REDIS_DEFAULT_AOF_REWRITE_INCREMENTAL_FSYNC;//rewrite AOF文件时是否采用增量式fsync
其中aof_current_size参数未初始化,该值的初始化在Server启动加载AOF文件数据时初始化。


www.htsjk.Com true http://www.htsjk.com/shujukunews/429.html NewsArticle Redis数据持久化机制AOF原理分析之配置详解 if (!strcasecmp(argv[0],appendonly) argc == 2) {int yes;if ((yes = yesnotoi(argv[1])) == -1) {err = argument must be 'yes' or 'no'; goto loaderr;}server.aof_state = yes ? REDIS_AOF_ON...
评论暂时关闭