Redis 如果在aof中使用fdatasync()时发生崩溃,数据会发生什么情况?

Redis 如果在aof中使用fdatasync()时发生崩溃,数据会发生什么情况?,redis,Redis,我最近一直在阅读redis源代码,我发现在flushAppendOnlyFile()中,编写器使用fdatasync将数据更新到磁盘。 正如我们所知,fdatasync()不会写入元数据信息,而flushAppendOnlyFile()会更改aof文件大小。所以,如果在系统更新元数据之前发生崩溃,最新的aof数据会丢失吗? 作者在下面的文章中写道 我可以毫无问题地避免同步元数据,但如果我正确理解这一点,在仅附加文件上下文中,如果发生崩溃,不同步大小似乎相当于泄漏数据,我想。。。所以在我的背景下这

我最近一直在阅读redis源代码,我发现在flushAppendOnlyFile()中,编写器使用fdatasync将数据更新到磁盘。 正如我们所知,fdatasync()不会写入元数据信息,而flushAppendOnlyFile()会更改aof文件大小。所以,如果在系统更新元数据之前发生崩溃,最新的aof数据会丢失吗? 作者在下面的文章中写道

我可以毫无问题地避免同步元数据,但如果我正确理解这一点,在仅附加文件上下文中,如果发生崩溃,不同步大小似乎相当于泄漏数据,我想。。。所以在我的背景下这是不可能的

我不明白为什么在redis环境下不可能。
有人能帮我吗?

他不是这么说的
fdatasync
在文件大小发生变化时会更新文件的元数据,正如Salvatore回应的评论员“kosaki”所述,以及手册中所述

fdatasync()与fsync()类似,但它不会刷新修改后的元数据,除非需要该元数据以便正确处理后续的数据检索

(我的重点)。因此,使用
fdatasync
同步AOF时不会丢失数据

kosaki建议的是一种不同的同步方法,这种方法实际上永远不会同步元数据,Salvatore指出,如果发生崩溃,这将丢失数据。“不可能”的是使用该替代方案而不是
fdatasync