文件的写入和同步(对redis的AOF持久化理解)

来源:
在读《Redis设计与实现》的AOF持久化时,讲到了AOF文件的写入与同步时,对于flushAppendOnlyFile函数,它就是实现持久化的函数,把内存中数据写入文件,这个函数的行为是由服务器配置的appendfsync选项的值(如下图)来决定的。
文件的写入和同步(对redis的AOF持久化理解)_第1张图片我们可以看到三个值都是将aof_buf缓冲区的所有内容写入到aof文件,只是同步时操作不一样。对此,我们来理解一下写入和同步!

解答:
在现代os中,为了提高文件的写入操作,当用户调用到write函数将数据写入文件时,os先将数据写入到一个内存缓冲区里,正常是等到缓冲区满了或是规定时间到了,才真正地将缓冲区里的数据写入磁盘,这时才是持久化完成。

类似你用记事本写东西一样,写完之后你会Ctrl+v(保存),但是在没执行Ctrl+v的时候你也能看到自己写的,这时因为保存在内存缓冲区里了,然后你保存了,这才保存到磁盘了,所以我们可以把你写东西当做是对aof文件的写入,你执行Ctrl+v才是同步到磁盘操作。

这样虽然大大提高了效率,但是很不安全,在你写了好多字时,卡,忽然电脑停机了,写的东西全没了,就问你气不气?

所以appendfsync的选项值中的always、everysec都可以强制让os立即将缓冲区里的数据写入硬盘。always是写到缓冲区了立马就同步到磁盘,everysec是写到缓冲区的数据每秒就同步一次,丢失了也就丢失了上一秒内的数据,也不是很气。

你可能感兴趣的:(redis相关,文件的写入和同步)