一、描述

rdb(redis databses)

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


二、源码解析

2.1 src/rdb.c:rdbSaveBackground

[redis] rdb-dump.rdb

代码逻辑:

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

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


2.2 src/rdb.c:

[redis] rdb-dump.rdb

代码逻辑:

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快照文件的操作

相关文章:

  • 2021-07-20
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2021-12-23
  • 2021-09-17
  • 2022-01-05
  • 2021-10-03
猜你喜欢
  • 2022-12-23
  • 2021-06-27
  • 2021-07-06
  • 2022-12-23
  • 2021-07-19
  • 2021-12-11
  • 2021-12-18
相关资源
相似解决方案