redis(10)AOF持久化

1、AOF持久化是通過保存Redis服務(wù)器所執(zhí)行的寫命令來記錄數(shù)據(jù)庫狀態(tài)的,在AOF文件中,除了用于指定數(shù)據(jù)庫的select命令是服務(wù)器自動(dòng)添加的之外,其他都是我們之前通過客戶端發(fā)送的命令

2、服務(wù)器啟動(dòng)時(shí),可以通過載入和執(zhí)行AOF文件中保存的命令來還原服務(wù)器關(guān)閉之前的數(shù)據(jù)庫狀態(tài)

3、AOF持久化功能的實(shí)現(xiàn)可以分為命令追加(append),文件寫入、文件同步(sync)三個(gè)步驟

4、命令追加

當(dāng)打開aof功能,服務(wù)器在執(zhí)行完一個(gè)寫命令之后,會(huì)以協(xié)議格式將被執(zhí)行的寫命令追加到服務(wù)器狀態(tài)aof_buf緩沖區(qū)末尾

5、aof文件的寫入與同步

5.1、redis的服務(wù)器進(jìn)程就是一個(gè)事件循環(huán),這個(gè)循環(huán)中,文件事件負(fù)責(zé)接收客戶端命令請求,以及向客戶端發(fā)送命令回復(fù),時(shí)間事件則負(fù)責(zé)執(zhí)行像servercron函數(shù)這樣需要特定運(yùn)行的函數(shù),服務(wù)器每次結(jié)束一個(gè)事件循環(huán)之前,它都會(huì)調(diào)用flushappendonlyfile函數(shù),考慮是否需要將aof_buf緩沖區(qū)中的內(nèi)容寫入和保存到aof文件里

5.2、flushappendonlyfile函數(shù)行為由appendfsync選項(xiàng)值來決定

always 將aof_buf緩沖區(qū)的所有內(nèi)容寫入并同步到aof文件 效率慢,機(jī)器故障不丟失數(shù)據(jù)

everysec 默認(rèn)值? 將aof_buf緩沖區(qū)中所有內(nèi)容寫入到aof文件,如果上次同步aof文件時(shí)間,距離現(xiàn)在超過一秒鐘,那么再次對aof文件進(jìn)行同步,并且這個(gè)同步操作是由一個(gè)線程專門負(fù)責(zé)執(zhí)行的 效率有保證,機(jī)器故障丟失一秒鐘數(shù)據(jù)

no 將aof_buf緩沖區(qū)的所有內(nèi)容寫入到aof文件,但并不對aof文件進(jìn)行同步,何時(shí)同步由操作系統(tǒng)決定 效率高,機(jī)器故障丟失數(shù)據(jù)不確定

6、aof文件的載入與數(shù)據(jù)還原

6.1、重新執(zhí)行一遍aof文件里面保存的命令就可以還原服務(wù)器關(guān)閉前的數(shù)據(jù)庫狀態(tài)

6.2、步驟 創(chuàng)建不帶網(wǎng)絡(luò)連接的偽客戶端 讀取文件一條命令,執(zhí)行,讀取下一行 執(zhí)行,知道文件末尾

7、為了解決aof文件體積膨脹問題,redis提供了aof文件重寫功能,redis可以撞見一個(gè)新的aof文件來替代現(xiàn)有的aof文件,新舊兩個(gè)數(shù)據(jù)庫狀態(tài)相同,但是新的不會(huì)包含任何浪費(fèi)空間的冗余命令,由紫禁城執(zhí)行,子進(jìn)程不是線程,可以在避免使用鎖情況下,保證數(shù)據(jù)安全性,

8、子進(jìn)程執(zhí)行重寫帶來數(shù)據(jù)庫狀態(tài)不一致問題,解決這個(gè)問題,創(chuàng)建一個(gè)重寫緩沖區(qū),子進(jìn)程執(zhí)行重寫命令期間,新命令會(huì)先寫入aof緩沖區(qū),然后寫入aof重寫緩沖區(qū),最后追加到新的aof文件里面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義。 我們知道,在w...
    空語閱讀 1,679評論 0 2
  • 企業(yè)級redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,280評論 0 7
  • 知識(shí)點(diǎn) AOF文件通過保存所有修改數(shù)據(jù)庫的寫命令請求來記錄服務(wù)器的數(shù)據(jù)庫狀態(tài) AOF文件中的所有命令都以Redis...
    wh4763閱讀 580評論 1 0
  • redis的持久化有兩種方式:RDB和AOF。 RDB持久化功能是將某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)庫狀態(tài)保存到一個(gè)RDB文件上(...
    黑金星閱讀 221評論 0 1
  • 本文是《Redis開發(fā)與運(yùn)維》的學(xué)習(xí)筆記。內(nèi)容大部分摘自此書。 眾所周知,redis是內(nèi)存數(shù)據(jù)庫,它把數(shù)據(jù)存儲(chǔ)在內(nèi)...
    大數(shù)據(jù)Zone閱讀 622評論 0 3

友情鏈接更多精彩內(nèi)容