Redis存儲以及持久化

存儲

redis使用了兩種文件格式:全量數(shù)據(jù)和增量請求蒋纬。

全量數(shù)據(jù)格式是把內存中的數(shù)據(jù)寫入磁盤猎荠,便于下次讀取文件進行加載;

增量請求文件則是把內存中的數(shù)據(jù)序列化為操作請求蜀备,用于讀取文件進行replay得到數(shù)據(jù)关摇,序列化的操作包括SET、RPUSH碾阁、SADD输虱、ZADD。

redis的存儲分為內存存儲脂凶、磁盤存儲和log文件三部分宪睹,配置文件中有三個參數(shù)對其進行配置。

save seconds updates艰猬,save配置横堡,指出在多長時間內,有多少次更新操作冠桃,就將數(shù)據(jù)同步到數(shù)據(jù)文件命贴。這個可以多個條件配合,比如默認配置文件中的設置,就設置了三個條件胸蛛。

appendonly

yes/no

污茵,appendonly配置,指出是否在每次更新操作后進行日志記錄葬项,如果不開啟泞当,可能會在斷電時導致一段時間內的數(shù)據(jù)丟失。因為redis本身同步數(shù)據(jù)文件是按上面的save條件來同步的民珍,所以有的數(shù)據(jù)會在一段時間內只存在于內存中襟士。

appendfsync no/always/everysec ,appendfsync配置嚷量,no表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤陋桂,always表示每次更新操作后手動調用fsync()將數(shù)據(jù)寫到磁盤,everysec表示每秒同步一次蝶溶。

Redis的持久化

Redis雖然是基于內存的存儲系統(tǒng)嗜历,但是它本身是支持內存數(shù)據(jù)的持久化的,而且提供兩種主要的持久化策略:RDB快照和AOF日志抖所。

Redis的RDB快照

Redis支持將當前數(shù)據(jù)的快照存成一個數(shù)據(jù)文件的持久化機制梨州,即RDB快照。這種方法是非常好理解的田轧,但是一個持續(xù)寫入的數(shù)據(jù)庫如何生成快照呢暴匠?Redis借助了fork命令的copy on write機制。在生成快照時涯鲁,將當前進程fork出一個子進程巷查,然后在子進程中循環(huán)所有的數(shù)據(jù),將數(shù)據(jù)寫成為RDB文件抹腿。

我們可以通過Redis的save指令來配置RDB快照生成的時機岛请,比如你可以配置當10分鐘以內有100次寫入就生成快照,也可以配置當1小時內有1000次寫入就生成快照警绩,也可以多個規(guī)則一起實施崇败。這些規(guī)則的定義就在Redis的配置文件中,你也可以通過Redis的CONFIG SET命令在Redis運行時設置規(guī)則肩祥,不需要重啟Redis后室。

Redis的RDB文件不會壞掉,因為其寫操作是在一個新進程中進行的混狠,當生成一個新的RDB文件時岸霹,Redis生成的子進程會先將數(shù)據(jù)寫到一個臨時文件中,然后通過原子性rename系統(tǒng)調用將臨時文件重命名為RDB文件将饺,這樣在任何時候出現(xiàn)故障贡避,Redis的RDB文件都總是可用的痛黎。同時,Redis的RDB文件也是Redis主從同步內部實現(xiàn)中的一環(huán)刮吧。

Redis的AOF日志

AOF日志的全稱是append only file湖饱,從名字上我們就能看出來,它是一個追加寫入的日志文件杀捻。

AOF是一個寫文件操作井厌,其目的是將操作日志寫到磁盤上,所以它也同樣會遇到我們上面說的寫操作的5個流程致讥。那么寫AOF的操作安全性又有多高呢仅仆。實際上這是可以設置的,在Redis中對AOF調用write(2)寫入后垢袱,何時再調用fsync將其寫到磁盤上蝇恶,通過appendfsync選項來控制,下面appendfsync的三個設置項惶桐,安全強度逐漸變強。

1)appendfsync no

當設置appendfsync為no的時候潘懊,Redis不會主動調用fsync去將AOF日志內容同步到磁盤姚糊,所以這一切就完全依賴于操作系統(tǒng)的調試了。對大多數(shù)Linux操作系統(tǒng)授舟,是每30秒進行一次fsync救恨,將緩沖區(qū)中的數(shù)據(jù)寫到磁盤上。

2)appendfsync everysec

當設置appendfsync為everysec的時候释树,Redis會默認每隔一秒進行一次fsync調用肠槽,將緩沖區(qū)中的數(shù)據(jù)寫到磁盤。但是當這一次的fsync調用時長超過1秒時奢啥。Redis會采取延遲fsync的策略秸仙,再等一秒鐘。也就是在兩秒后再進行fsync桩盲,這一次的fsync就不管會執(zhí)行多長時間都會進行寂纪。這時候由于在fsync時文件描述符會被阻塞,所以當前的寫操作就會阻塞赌结。所以結論就是捞蛋,在絕大多數(shù)情況下,Redis會每隔一秒進行一次fsync柬姚。在最壞的情況下拟杉,兩秒鐘會進行一次fsync操作。這一操作在大多數(shù)數(shù)據(jù)庫系統(tǒng)中被稱為group commit量承,就是組合多次寫操作的數(shù)據(jù)搬设,一次性將日志寫到磁盤穴店。

3)appednfsync always

當設置appendfsync為always時,每一次寫操作都會調用一次fsync焕梅,這時數(shù)據(jù)是最安全的迹鹅,當然,由于每次都會執(zhí)行fsync贞言,所以其性能也會受到影響斜棚。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市该窗,隨后出現(xiàn)的幾起案子弟蚀,更是在濱河造成了極大的恐慌,老刑警劉巖酗失,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义钉,死亡現(xiàn)場離奇詭異,居然都是意外死亡规肴,警方通過查閱死者的電腦和手機捶闸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拖刃,“玉大人删壮,你說我怎么就攤上這事《夷担” “怎么了央碟?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長均函。 經常有香客問我亿虽,道長,這世上最難降的妖魔是什么苞也? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任洛勉,我火速辦了婚禮,結果婚禮上如迟,老公的妹妹穿的比我還像新娘坯认。我一直安慰自己,他們只是感情好氓涣,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布牛哺。 她就那樣靜靜地躺著,像睡著了一般劳吠。 火紅的嫁衣襯著肌膚如雪引润。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天痒玩,我揣著相機與錄音淳附,去河邊找鬼议慰。 笑死,一個胖子當著我的面吹牛奴曙,可吹牛的內容都是我干的别凹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼洽糟,長吁一口氣:“原來是場噩夢啊……” “哼炉菲!你這毒婦竟也來了?” 一聲冷哼從身側響起坤溃,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤拍霜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薪介,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祠饺,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年汁政,在試婚紗的時候發(fā)現(xiàn)自己被綠了道偷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡记劈,死狀恐怖试疙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情抠蚣,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布履澳,位于F島的核電站嘶窄,受9級特大地震影響,放射性物質發(fā)生泄漏距贷。R本人自食惡果不足惜柄冲,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忠蝗。 院中可真熱鬧现横,春花似錦、人聲如沸阁最。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽速种。三九已至姜盈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間配阵,已是汗流浹背馏颂。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工示血, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人救拉。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓难审,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亿絮。 傳聞我的和親對象是個殘疾皇子告喊,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容

  • 本文翻譯自官方文檔http://redis.io/topics/persistence 。 Redis 持久化 R...
    六尺帳篷閱讀 1,630評論 1 15
  • Redis持久化: 提供了多種不同級別的持久化方式:一種是RDB,另一種是AOF. RDB 持久化可以在指定的時間...
    不姓馬的小馬哥閱讀 640評論 0 10
  • Redis 持久化: 常用的兩種持久化 提供了多種不同級別的持久化方式:一種是RDB,另一種是AOF. RDB 持...
    邊學邊記閱讀 1,126評論 0 1
  • 本文檔翻譯自http://redis.io/topics/persistence壹无。 這篇文章提供了 Redis 持...
    daos閱讀 690評論 0 10
  • 一寫下這兩個字葱绒,似嗔似恨,愛裝修的感覺斗锭,通過自己的設計搭配地淀,一處處適合人居住的房子呈現(xiàn)出來,而且總有那么特別的一兩...
    秋子123閱讀 191評論 2 1