[redis] rdb-dump.rdb

一、描述

rdb(redis databses)

redis的其中一个持久化数据方式(默认),是rdb模式,简单说就是会再一定的触发条件下,会启动子进程生成dump.rdb(快照文件)


二、源码解析

2.1 src/rdb.c:rdbSaveBackground


代码逻辑:

1.fork(),创建出子进程

2.子进程调用rdbSave函数,完成实际的dump操作


2.2 src/rdb.c:


代码逻辑:

1.创建临时文件,tmp-{pid}.rdb

snprintf(tmpfile,256,"temp-%d.rdb", (int) getpid());

2.将快照数据,写入到临时文件中

rioInitWithFile(&rdb,fp);

if (rdbSaveRio(&rdb,&error) == C_ERR) {

    errno = error;

    goto werr;

}

3.将数据实际写入到磁盘中

if (fflush(fp) == EOF) goto werr; //将用户空间的缓存数据刷入内核空间的缓存数据中

if (fsync(fileno(fp)) == -1) goto werr;//将内核空间的缓存数据刷入到实际的物理磁盘中

if (fclose(fp) == EOF) goto werr; //关闭文件,完成写入操作

4.将临时文件改名为dump.rdb

rename(tmpfile,filename)


三、触发条件设置

save 900 1

save 300 10

save 60 10000

意思是:

900秒内有1次数据改变

300秒内有10次数据改变

60秒内有10000次数据改变

满足上面其中一个条件,便会触发生成dump.rdb快照文件的操作

发布了140 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_16097611/article/details/79940171