日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

redis的持久化主要有兩大機制,即AOF日志和RDB快照。

1、AOF日志是如何實現的?

與傳統數據庫寫日志不一樣,先執行命令,再寫入日志。

宕機了,Redis如何避免數據丟失?

 

比如:set testkey test value 這條命令的執行,AOF的日志內容是這樣展示的

宕機了,Redis如何避免數據丟失?

 

*3代表有當前命令有三個部分,3表示有三個字節,也就是set,3表示有三個字節,也就是set,3表示有三個字節,也就是set,7表示有7個字節,也就是testkey

為什么先執行和寫日志呢,就是為了不出現語法錯誤導致恢復的時候出錯,因為先寫日志的話redis不會額外的檢查語法的錯誤,這樣錯了的話導致后續恢復的時候出錯。還有一個好處就是不會阻塞當前的寫操作。

但是也有風險,Redis用作數據庫的話,沒來得及寫日志就宕機了,這樣無法恢復數據了。還有就是如果把日志文件寫入磁盤阻塞,后續的操作也沒法執行了。

2、三種寫回策略

分別是同步寫回Always,每秒寫回Everysec,操作系統控制寫回No。

宕機了,Redis如何避免數據丟失?

 

高性能就選操作系統控制,高可用就選同步寫回,這種就寫每秒寫回.

同樣畢竟是文件系統,文件太大了怎么辦?

3、日志文件太大了怎么辦?

AOF重寫機制為啥可以讓文件變小呢?因為重寫只會保持最新的記錄,一個key對應的value是可能被多次修改的,那么在原本的日志文件就會存在多條記錄。重寫機制則只會存最新的記錄。

宕機了,Redis如何避免數據丟失?

 

4、AOF重寫會阻塞嗎?

重寫是由后臺線程bgrwriteaof來執行完成的,總結就是一個拷貝,兩處日志。

一個拷貝就是主線程fork后臺的bgrwriteaof子進程,fork會把主線程的內存拷貝一份給bgrwriteaof子進程,這里面就包含了數據庫的最新數據,這個時候子進程就會把拷貝的數據寫成操作,記入重寫日志。

兩處日志是,因為主線程未阻塞,仍然可以處理新來的操作。此時,如果有寫操作,第一處日志就是指正在使用的AOF日志,Redis會把這個操作寫到它的緩沖區。這樣一來,即使宕機了,這個AOF日志的操作仍然是齊全的,可以用于恢復。

而第二處日志,就是指新的AOF重寫日志。這個操作也會被寫到重寫日志的緩沖區。這樣,重寫日志也不會丟失最新的操作。等到拷貝數據的所有操作記錄重寫完成后,重寫日志記錄的這些最新操作也會寫入新的AOF文件,以保證數據庫最新狀態的記錄。此時,我們就可以用新的AOF文件替代舊文件了。

宕機了,Redis如何避免數據丟失?

 

總結來說,每次AOF重寫時,Redis會先執行一個內存拷貝,用于重寫;然后,使用兩個日志保證在重寫過程中,新寫入的數據不會丟失。而且,因為Redis采用額外的線程進行數據重寫,所以,這個過程并不會阻塞主線程。


作者:狗日de阿良
鏈接:https://juejin.cn/post/6896072419543515143

分享到:
標簽:Redis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定