gpt4 book ai didi

redis - 如果在aof中使用fdatasync()发生崩溃,数据会发生什么变化?

转载 作者:可可西里 更新时间:2023-11-01 11:25:46 26 4
gpt4 key购买 nike

最近在看redis的源码,发现在flushAppendOnlyFile()中writer使用了fdatasync来更新数据到磁盘。正如我们所知,fdatasync() 不写入元数据信息,而 flushAppendOnlyFile() 将更改 aof 文件大小。那么如果在系统更新元数据之前发生崩溃,最新的aof数据会丢失吗?作者在下面写了http://oldblog.antirez.com/post/fsync-different-thread-useless.html

I can avoid synching metadata without problems, but if I understand this correctly, in an append only file context, not synching the size seems equivalent to leaking data if a crash occurs I guess... so this is not possible in my context.

我不明白为什么在 redis 上下文中这是不可能的。谁能帮帮我?

最佳答案

这不是他说的。 fdatasync 确实在文件大小发生变化时更新文件的元数据,正如 Salvatore 正在回应的评论者“kosaki”所指出的那样,并且正如手册所指出的那样

fdatasync() is similar to fsync(), but it does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled

(强调我的)。所以使用fdatasync同步AOF时不会有数据丢失。

kosaki 所建议的是一种不同的同步方法,它确实永远不会同步元数据,而 Salvatore 指出在发生崩溃时丢失数据。 “不可能”的是使用替代方案代替 fdatasync

关于redis - 如果在aof中使用fdatasync()发生崩溃,数据会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com