最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 07:35:46
文档

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

Redis数据持久化机制AOF原理分析之配置详解:本文所引用的源码全部来自Redis2.8.2版本。 Redis的配置文件为redis.conf, 对配置文件的解析代码见config.c 原创文章转载请注明,本文来自http://blog.csdn.net/acceptedxukai/article/details/18135219 AOF实现机制简介 AOF
推荐度:
导读Redis数据持久化机制AOF原理分析之配置详解:本文所引用的源码全部来自Redis2.8.2版本。 Redis的配置文件为redis.conf, 对配置文件的解析代码见config.c 原创文章转载请注明,本文来自http://blog.csdn.net/acceptedxukai/article/details/18135219 AOF实现机制简介 AOF


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

appendfilename

含义:AOF的文件名

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

这两个配置就暂不解释,见下面redisServer结构体中中有关AOF参数的注释

redisServer数据结构中有关AOF的参数

struct redisServer {
	…………
	
 /* AOF persistence */
 int aof_state; /* REDIS_AOF_(ON|OFF|WAIT_REWRITE) */
 int aof_fsync; /* Kind of fsync() policy */
 char *aof_filename; /* Name of the AOF file */
 int aof_no_fsync_on_rewrite; /* Don't fsync if a rewrite is in prog. */
 int aof_rewrite_perc; /* Rewrite AOF if % growth is > M and... */
 off_t aof_rewrite_min_size; /* the AOF file is at least N bytes. */ aof文件最小字节数
 off_t aof_rewrite_base_size; /* AOF size on latest startup or rewrite. */ 上一次aof文件的大小
 off_t aof_current_size; /* AOF current size. */ 当前aof文件的大小
 int aof_rewrite_scheduled; /* Rewrite once BGSAVE terminates. */
 pid_t aof_child_pid; /* PID if rewriting process */ 子进程的pid
 list *aof_rewrite_buf_blocks; /* Hold changes during an AOF rewrite. */
 sds aof_buf; /* AOF buffer, written before entering the event loop */
 int aof_fd; /* File descriptor of currently selected AOF file */ aof文件描述符
 int aof_selected_db; /* Currently selected DB in AOF */
 time_t aof_flush_postponed_start; /* UNIX time of postponed AOF flush */
 time_t aof_last_fsync; /* UNIX time of last fsync() */
 time_t aof_rewrite_time_last; /* Time used by last AOF rewrite run. */
 time_t aof_rewrite_time_start; /* Current AOF rewrite start time. */
 int aof_lastbgrewrite_status; /* REDIS_OK or REDIS_ERR */
 unsigned long aof_delayed_fsync; /* delayed AOF fsync() counter */
 int aof_rewrite_incremental_fsync;/* fsync incrementally while rewriting? */
	
	…………
}

字符串aof_buf与链表aof_rewrite_buf_blocks分别是追加AOF文件与rewrite AOF文件后处理差异数据的重要参数

initServerConfig函数对AOF参数的初始化及注释

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文件数据时初始化。

小结

本文就是简单介绍Redis中有关AOF机制实现的相关参数的意义,方便对接下来AOF数据持久化机制的理解,AOF机制的实现比较复杂,大致分为Server启动加载AOF文件数据、将新的数据追加到AOF文件中、自动rewrite AOF文件、客户端请求BGREWRITEAOF指令四个部分,下面的博客将介绍这三个部分的实现。

文档

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

Redis数据持久化机制AOF原理分析之配置详解:本文所引用的源码全部来自Redis2.8.2版本。 Redis的配置文件为redis.conf, 对配置文件的解析代码见config.c 原创文章转载请注明,本文来自http://blog.csdn.net/acceptedxukai/article/details/18135219 AOF实现机制简介 AOF
推荐度:
标签: 数据 原理 配置
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top