在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Java/ redis aof_buf緩沖區(qū)寫入aof文件和同步aof文件有什么區(qū)別?

redis aof_buf緩沖區(qū)寫入aof文件和同步aof文件有什么區(qū)別?

把緩存數(shù)據(jù)寫入aof不就已經(jīng)實(shí)現(xiàn)了同步了嗎,即使在寫入的過程中又有新的數(shù)據(jù)進(jìn)來,那為什么說always策略最多只丟失一次事件循環(huán)的數(shù)據(jù),everysecond策略最多只丟失一秒數(shù)據(jù)?
clipboard.png

回答
編輯回答
哎呦喂

在AOF持久化的過程中,其實(shí)上是分成兩個(gè)部分:
WRITE:根據(jù)條件,將 aof_buf 中的緩存寫入到 AOF 文件。
SAVE:根據(jù)條件,調(diào)用 fsync 或 fdatasync 函數(shù),將 AOF 文件保存到磁盤中。
具體可以參見:http://redisbook.readthedocs....

但具體為何要分成兩個(gè)部分,原因相當(dāng)于“把緩存數(shù)據(jù)寫入aof不就已經(jīng)實(shí)現(xiàn)了同步了嗎”,具體如下:
對(duì)于write函數(shù)而言,其只會(huì)更新內(nèi)存頁緩存,而臟頁的更新取決于os的統(tǒng)一調(diào)度;由于write函數(shù)并不會(huì)一直阻塞直到IO完成才返回,因此期間若時(shí)發(fā)生故障就會(huì)造成數(shù)據(jù)丟失問題(盡管時(shí)間窗很小);對(duì)事務(wù)及數(shù)據(jù)一致性要求高的服務(wù)來說(比如備份服務(wù)),需要通過同步IO原語來提供os級(jí)別的保證,比如AOF中使用的fsync,其目的就是保證文件所有已修改的內(nèi)容內(nèi)容已經(jīng)爭(zhēng)取同步到磁盤(因?yàn)槠鋾?huì)阻塞直到IO完成);簡(jiǎn)單來說write不是同步的,fsync是同步且有明確結(jié)果的

順便多說一句,對(duì)于已被打開的文件執(zhí)行寫操作來說,應(yīng)先調(diào)用fflush函數(shù)將修改同步到內(nèi)核緩沖區(qū),然后再調(diào)用fsync函數(shù)執(zhí)行同步調(diào)用,這樣的同步實(shí)現(xiàn)最安全,這也是AOF的源碼實(shí)現(xiàn)方式

2017年3月30日 12:45