一、RDB:Redis Database
1.RDB是什么?
就是在指定的時(shí)間間隔內(nèi),將內(nèi)存中的數(shù)據(jù)集快照(Snapshot)寫入到本地磁盤
2.Fork:Fork的作用是復(fù)制一個(gè)與當(dāng)前進(jìn)程一樣的進(jìn)程,新進(jìn)程的所有數(shù)據(jù)都和原進(jìn)程一致,但是是一個(gè)全新的進(jìn)程,并作為遠(yuǎn)進(jìn)程的子進(jìn)程
3.rdb保存的是dump.rdb文件,隔一段時(shí)間redis都會(huì)備份一份最新的數(shù)據(jù)去替換掉原來(lái)的dump.rdb文件以保證備份數(shù)據(jù)的完整性
4.當(dāng)服務(wù)器器重啟的時(shí)候redis會(huì)自動(dòng)加載dump.rdb文件恢復(fù)數(shù)據(jù)
5.rdb是整個(gè)內(nèi)存的壓縮過(guò)的Snapshot,rdb的數(shù)據(jù)結(jié)構(gòu),可以配置復(fù)合的快照觸發(fā)條件,
默認(rèn)的快照觸發(fā)條件:是1分鐘內(nèi)改變了1萬(wàn)次或5分鐘內(nèi)改了10次,或15分鐘內(nèi)改了1次
6.快照:
·?save:觸發(fā)快照,save時(shí)只管保存,其他不管,全部阻塞
·?BGSAVE:Redis會(huì)在后臺(tái)異步進(jìn)行快照操作,快照同時(shí)還可以相應(yīng)客戶端請(qǐng)求,可以通過(guò)lastsave命令來(lái)獲取最后一次成功執(zhí)行快照的時(shí)間
· 執(zhí)行flushall命令,也會(huì)產(chǎn)生dump.rdb文件,但里面是空的,無(wú)意義
7.如何恢復(fù):將備份文件dump.rdb文件移動(dòng)到redis安裝目錄并啟動(dòng)服務(wù)即可
8.優(yōu)勢(shì):適合大規(guī)模的數(shù)據(jù)恢復(fù)
9.劣勢(shì):
·??在一定間隔時(shí)間做一次備份,所以如果redis意外down掉的話,就會(huì)丟失最后一次快照后的所有修改
·? Fork的時(shí)候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的膨脹性需要考慮
?
二、AOF:Append Only File
1.AOF是什么?
AOF是以日志的形式來(lái)記錄每個(gè)寫操作,將redis執(zhí)行過(guò)的所有寫指令記錄下來(lái)(讀指令不記錄),只許追加文件,但不可以改寫文件,reids啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù)。
換言之,就是redis啟動(dòng)的時(shí)候根據(jù)這個(gè)日志文件中的內(nèi)容從前到后執(zhí)行一遍以完成數(shù)據(jù)的恢復(fù)工作。
2.aof保存的是appendonly.aof文件,appendonly.aof文件和dump.rdb文件是可以共存的,如果兩個(gè)文件都在,redis會(huì)加載aof文件,如果aof文件出錯(cuò)則啟動(dòng)不起來(lái);
如果執(zhí)行了flushall命令,這時(shí)可以通過(guò)手動(dòng)刪除appendonly.aof文件中的flushall命令達(dá)到數(shù)據(jù)恢復(fù)的目的;
如果appendonly.aof文件語(yǔ)法有誤,可以手動(dòng)加載redis-check-aof文件恢復(fù),redis-check-aof文件會(huì)自動(dòng)刪除那些語(yǔ)法有誤的日志
3.aof啟動(dòng)/修復(fù)/恢復(fù):
· 正?;謴?fù):
·?啟動(dòng):設(shè)置Yes:修改默認(rèn)的appendonly? ?no 改為yes
· 備份:最好將aof文件備份一份到其他電腦上,這樣就算這臺(tái)電腦的硬件壞了也可以使用備份文件
· 恢復(fù):重啟redis然后重新加載
· 異?;謴?fù):redis-check-aof --fix 進(jìn)行修復(fù)
3.Appendfsync:追鎖策略
· Always:同步持久化,每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤,性能較差但數(shù)據(jù)完整性較好
· Everysec:出廠默認(rèn)推薦,異步操作,每秒記錄,如果一秒內(nèi)宕機(jī),則丟失這一秒的數(shù)據(jù)
· No:從不同步
4.rewrite:重寫策略
·? 是什么? aof采用文件追加的方式,文件難免會(huì)越來(lái)越大為避免出現(xiàn)這種情況,新增了重寫機(jī)制,當(dāng)aof文件的大小超過(guò)所設(shè)定的閾值時(shí),redis就會(huì)啟動(dòng)aof文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集
·? 重寫原理:aof文件持續(xù)增長(zhǎng)而過(guò)大時(shí),會(huì)fork出一條新進(jìn)程來(lái)將文件重寫,這點(diǎn)和快照有點(diǎn)相似
·? 觸發(fā)機(jī)制:redis會(huì)記錄上次重寫時(shí)的aof大小,默認(rèn)配置是當(dāng)aof文件大小是上次rewrite后大小的一倍且文件大于64M時(shí)觸發(fā)
5.優(yōu)勢(shì): aof每秒同步策略效率較好,不同步效率和rdb相同
6.劣勢(shì):aof運(yùn)行效率要慢于rdb,相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件,恢復(fù)速度慢于rdb
?
來(lái)源:https://www.icode9.com/content-2-665101.html
聯(lián)系客服