
文章插圖
Redis所有數(shù)據(jù)都是保存在內(nèi)存中,Redis數(shù)據(jù)備份可以定期的通過異步方式保存到磁盤上,該方式稱為半持久化模式,如果每一次數(shù)據(jù)變化都寫入aof文件里面,則稱為全持久化模式 。同時(shí)還可以基于Redis主從復(fù)制實(shí)現(xiàn)Redis備份與恢復(fù) 。
1. 半持久化RDB模式半持久化RDB模式也是Redis備份默認(rèn)方式,是通過快照(snapshotting)完成的,當(dāng)符合在Redis.conf配置文件中設(shè)置的條件時(shí)Redis會(huì)自動(dòng)將內(nèi)存中的所有數(shù)據(jù)進(jìn)行快照并存儲在硬盤上,完成數(shù)據(jù)備份 。
Redis進(jìn)行RDB快照的條件由用戶在配置文件中自定義,由兩個(gè)參數(shù)構(gòu)成:時(shí)間和改動(dòng)的鍵的個(gè)數(shù) 。當(dāng)在指定的時(shí)間內(nèi)被更改的鍵的個(gè)數(shù)大于指定的數(shù)值時(shí)就會(huì)進(jìn)行快照 。在配置文件中已經(jīng)預(yù)置了3個(gè)條件:
save9001#900秒內(nèi)有至少1個(gè)鍵被更改則進(jìn)行快照;save30010#300秒內(nèi)有至少10個(gè)鍵被更改則進(jìn)行快照;save6010000#60秒內(nèi)有至少10000個(gè)鍵被更改則進(jìn)行快照 。默認(rèn)可以存在多個(gè)條件,條件之間是“或”的關(guān)系,只要滿足其中一個(gè)條件,就會(huì)進(jìn)行快照 。如果想要禁用自動(dòng)快照,只需要將所有的save參數(shù)刪除即可 。Redis默認(rèn)會(huì)將快照文件存儲在Redis數(shù)據(jù)目錄,默認(rèn)文件名為:dump.rdb文件,可以通過配置dir和dbfilename兩個(gè)參數(shù)分別指定快照文件的存儲路徑和文件名 。也可以在Redis命令行執(zhí)行config get dir獲取Redis數(shù)據(jù)保存路徑,如圖12-15(a)、12-15(b)所示:圖12-15(a) 獲取Redis數(shù)據(jù)目錄
圖12-15(b) Redis數(shù)據(jù)目錄及dump.rdb文件
Redis實(shí)現(xiàn)快照的過程,Redis使用fork函數(shù)復(fù)制一份當(dāng)前進(jìn)程(父進(jìn)程)的副本(子進(jìn)程),父進(jìn)程繼續(xù)接收并處理客戶端發(fā)來的命令,而子進(jìn)程開始將內(nèi)存中的數(shù)據(jù)寫入硬盤中的臨時(shí)文件,當(dāng)子進(jìn)程寫入完所有數(shù)據(jù)后會(huì)用該臨時(shí)文件替換舊的RDB文件,至此一次快照操作完成 。
執(zhí)行fork的時(shí)操作系統(tǒng)會(huì)使用寫時(shí)復(fù)制(copy-on-write)策略,即fork函數(shù)發(fā)生的一刻父子進(jìn)程共享同一內(nèi)存數(shù)據(jù),當(dāng)父進(jìn)程要更改其中某片數(shù)據(jù)時(shí),操作系統(tǒng)會(huì)將該片數(shù)據(jù)復(fù)制一份以保證子進(jìn)程的數(shù)據(jù)不受影響,所以新的RDB文件存儲的是執(zhí)行fork一刻的內(nèi)存數(shù)據(jù) 。
Redis在進(jìn)行快照的過程中不會(huì)修改RDB文件,只有快照結(jié)束后才會(huì)將舊的文件替換成新的,也就是說任何時(shí)候RDB文件都是完整的 。這使得我們可以通過定時(shí)備份RDB文件來實(shí) 現(xiàn)Redis數(shù)據(jù)庫備份 。
RDB文件是經(jīng)過壓縮(可以配置rdbcompression參數(shù)以禁用壓縮節(jié)省CPU占用)的二進(jìn)制格式,所以占用的空間會(huì)小于內(nèi)存中的數(shù)據(jù)大小,更加利于傳輸 。除了自動(dòng)快照,還可以手動(dòng)發(fā)送SAVE和BGSAVE命令讓Redis執(zhí)行快照,兩個(gè)命令的區(qū)別在于,前者是由主進(jìn)程進(jìn)行快照操作,會(huì)阻塞住其他請求,后者會(huì)通過fork子進(jìn)程進(jìn)行快照操作 。
Redis啟動(dòng)后會(huì)讀取RDB快照文件,將數(shù)據(jù)從硬盤載入到內(nèi)存,根據(jù)數(shù)據(jù)量大小與結(jié)構(gòu)和服務(wù)器性能不同,通常將一個(gè)記錄一千萬個(gè)字符串類型鍵、大小為1GB的快照文件載入到內(nèi)存中需花費(fèi)20~30秒鐘 。
通過RDB方式實(shí)現(xiàn)持久化,一旦Redis異常退出,就會(huì)丟失最后一次快照以后更改的所有數(shù)據(jù) 。此時(shí)需要開發(fā)者根據(jù)具體的應(yīng)用場合,通過組合設(shè)置自動(dòng)快照條件的方式來將可能發(fā)生的數(shù)據(jù)損失控制在能夠接受的范圍 。
2 .全持久化AOF模式如果數(shù)據(jù)很重要無法承受任何損失,可以考慮使用AOF方式進(jìn)行持久化,默認(rèn)Redis沒有開啟AOF(append only file)方式的全持久化模式 。
在啟動(dòng)時(shí)Redis會(huì)逐個(gè)執(zhí)行AOF文件中的命令來將硬盤中的數(shù)據(jù)載入到內(nèi)存中,載入的速度相較RDB會(huì)慢一些,開啟AOF持久化后每執(zhí)行一條會(huì)更改Redis中的數(shù)據(jù)的命令,Redis就會(huì)將該命令寫入硬盤中的AOF文件 。AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數(shù)設(shè)置的,默認(rèn)的文件名是appendonly.aof,可以通過appendfilename參數(shù)修改該名稱 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時(shí)就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 瀏覽器工作原理簡單說明 瀏覽器工作原理詳解
- 手機(jī)格式化數(shù)據(jù)恢復(fù)軟件 反格式化恢復(fù)工具
- 伸手跳摘果子是什么原理
- 車間降溫通風(fēng)解決方案 降溫型除濕機(jī)原理
- 杠桿原理通俗解釋 杠桿原理是什么意思
- 北京郵電大學(xué)考研通信原理
- 做空原理簡單說明 做空什么意思
- 人大政治學(xué)原理考研
- 自動(dòng)控制考研輔導(dǎo)書
- pn結(jié)工作原理
