1

这是aof.c中函数末尾的代码片段flushAppendOnlyFile,它将aof缓冲区写入磁盘。

/* Perform the fsync if needed. */
if (server.aof_fsync == AOF_FSYNC_ALWAYS) {
    server.aof_last_fsync = server.unixtime;
} else if ((server.aof_fsync == AOF_FSYNC_EVERYSEC &&
            server.unixtime > server.aof_last_fsync)) {
    // Why create fsync job only while sync_in_progress is false?
    if (!sync_in_progress) aof_background_fsync(server.aof_fd);
    server.aof_last_fsync = server.unixtime;
}

Redis bio 为 fsync 实现了一个后台作业列表。函数aof_background_fsync将一个新的 fsync 作业附加到列表中。

为什么 redis 只在此文件上创建 fsync 作业时才sync_in_progress为假?如果sync_in_progress为真,则有多个 fsync 作业等待执行。为什么redis拒绝在这种情况下附加这个fsync作业?

(这里是整个flushAppendOnlyFile 函数

4

0 回答 0