木材加工公司網(wǎng)站建設(shè)廣告投放渠道
一、為什么需要持久化
redis本身運(yùn)行時(shí)數(shù)據(jù)保存在內(nèi)存中,如果不進(jìn)行持久化,那么在redis出現(xiàn)非正常原因宕機(jī)或者關(guān)閉redis的進(jìn)程或者關(guān)閉計(jì)算機(jī)后數(shù)據(jù)肯定被會(huì)操作系統(tǒng)從內(nèi)存中清掉。當(dāng)然,redis本身默認(rèn)采用了一種持久化方式,即RDB (Redis DataBase),可以在redis的目錄中找到dump.rdb文件,這就是使用RDB方式做持久化后生成的數(shù)據(jù)文件。
二、常見(jiàn)的兩種持久化方式
一、RDB(Redis Database)快照
1、是什么:即redis數(shù)據(jù)庫(kù),rdb持久性以指定的時(shí)間間隔執(zhí)行數(shù)據(jù)集的時(shí)間點(diǎn)快照。
?2、作用:
在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤。也就是Snapshot內(nèi)存快照。等redis回復(fù)時(shí)再將硬盤快照文件直接讀回到內(nèi)存里。保存?zhèn)浞輹r(shí)執(zhí)行的是全量快照,把內(nèi)存中的所有數(shù)據(jù)都保存到dump.rdb文件
3、持久化觸發(fā)類型:
自動(dòng)觸發(fā):
手動(dòng)觸發(fā):
Redis提供了兩個(gè)命令來(lái)手動(dòng)生成RDB文件
save:在主進(jìn)程中執(zhí)行會(huì)阻塞當(dāng)前redis服務(wù)器,直到持久化工作完成,在執(zhí)行save命令期間,redis不能處理其他命令,線上禁止使用。
bgsave:redis會(huì)在后臺(tái)異步進(jìn)行快照操作,不阻塞快照同時(shí)還可以響應(yīng)客戶端請(qǐng)求,該觸發(fā)方式會(huì)fork一個(gè)子進(jìn)程由子進(jìn)程復(fù)制持久化過(guò)程。
注意:生產(chǎn)上只允許用bgsave,不允許用save
lastsave:獲取最后一次成功執(zhí)行快照的時(shí)間,獲取到的是時(shí)間戳,在Linux中可以使用date -d @時(shí)間戳進(jìn)行時(shí)間的轉(zhuǎn)換
4、如何恢復(fù)
將備份文件移動(dòng)到redis安裝目錄并啟動(dòng)服務(wù)即可。
注意:1、執(zhí)行flushall/flushdb命令也會(huì)產(chǎn)生dump.rdb文件,但里面是空的,沒(méi)有任何意義。2、物理恢復(fù),服務(wù)和備份分機(jī)隔離。以防止生產(chǎn)機(jī)物理?yè)p壞后備份文件也掛了。
5、優(yōu)劣勢(shì)
優(yōu)點(diǎn):官網(wǎng)
1、適合大規(guī)模數(shù)據(jù)恢復(fù)
2、按照業(yè)務(wù)定時(shí)備份
3、對(duì)數(shù)據(jù)完整性和一致性要求不高
4、RDB文件在內(nèi)存中的加載速度要比AOF快得多
缺點(diǎn):官網(wǎng)
?1、在一定間隔時(shí)間做一次備份,如果redis意外宕機(jī)了,就會(huì)丟失從當(dāng)前至最近一次快照期間的數(shù)據(jù),快照之間的數(shù)據(jù)會(huì)丟失。
2、內(nèi)存數(shù)據(jù)的全量同步,如果數(shù)據(jù)量太大會(huì)導(dǎo)致I/O嚴(yán)重影響服務(wù)器性能
3、RDB依賴于主進(jìn)程的fork,在更大的數(shù)據(jù)集中,這可能導(dǎo)致服務(wù)請(qǐng)求的瞬間延遲。fork的時(shí)候內(nèi)存數(shù)據(jù)被克隆了一份,大致兩倍的膨脹,需要慎重考慮。
6、使用redis -check -rdb 對(duì)損壞的rdb文件進(jìn)行修復(fù)
7、RDB的觸發(fā)
1、配置文件中默認(rèn)的快照配置,即多少時(shí)間內(nèi)進(jìn)行了多少次redis數(shù)據(jù)的操作觸發(fā)rdb持久化機(jī)制
2、手動(dòng)save/bgsave命令
3、執(zhí)行flashall/flashdb命令也會(huì)產(chǎn)生dump.rdb文件,但里面是空的,無(wú)意義。
4、執(zhí)行shutdown且沒(méi)有設(shè)置開(kāi)啟aof持久化
5、主從復(fù)制時(shí),主節(jié)點(diǎn)自動(dòng)觸發(fā)
8、禁用rdb
1、redis-cli config set save "":動(dòng)態(tài)的所有停止rdb保存規(guī)則
2、配置文件上禁用
二、AOF(Append Only File)
一、是什么
?二、能干什么
主要是記錄每次redis的除讀取操作外的所有操作指令,AOF保存的是appendonly.aof文件
三、AOF持久化工作流程
四、AOF緩沖區(qū)三種寫(xiě)回策略?
1、Always:同步寫(xiě)回,每個(gè)寫(xiě)命令執(zhí)行完立刻同步地將日志寫(xiě)回磁盤。
2、everysec(默認(rèn)寫(xiě)回策略):每秒寫(xiě)回,每個(gè)寫(xiě)命令執(zhí)行完,只是先把日志寫(xiě)到aof文件的內(nèi)存緩沖區(qū),每隔1秒把緩沖區(qū)中的內(nèi)容寫(xiě)入到磁盤文件。
3、no:操作系統(tǒng)控制的寫(xiě)回。每個(gè)命令執(zhí)行完,只是先把日志寫(xiě)到AOF文件的內(nèi)存緩沖區(qū),由操作系統(tǒng)決定何時(shí)將緩沖區(qū)內(nèi)容寫(xiě)回磁盤
五、redis7 Multi Part AOF 的設(shè)計(jì)?
redis7之前AOF文件有且只有一個(gè) ,redis7之后有三個(gè)文件:base基本文件、incr增量文件、manifest清單文件,且有一個(gè)配置目錄用于和rdb區(qū)分
六、AOF異常文件修復(fù)
七、優(yōu)劣勢(shì)?
優(yōu)勢(shì):?
劣勢(shì):
1、對(duì)于相同數(shù)據(jù)集的數(shù)據(jù)而言AOF文件要大于RDB文件,且恢復(fù)速度要慢于RDB
2、AOF運(yùn)行效率慢于RDB,每秒同步策略效率較好,不同步效率和RDB相同
八、AOF重寫(xiě)機(jī)制?
?1、是什么
?啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集
2、兩種觸發(fā)機(jī)制?
自動(dòng)觸發(fā):
手動(dòng)觸發(fā): 直接發(fā)送bgrewriteaof命令?
重寫(xiě)原理:
自Redis 7.0.0以來(lái),當(dāng)安排AOF重寫(xiě)時(shí),Redis父進(jìn)程會(huì)打開(kāi)一個(gè)新的增量AOF文件以繼續(xù)寫(xiě)入。子進(jìn)程執(zhí)行重寫(xiě)邏輯并生成新的基本AOF。Redis將使用一個(gè)臨時(shí)清單文件來(lái)跟蹤新生成的基本文件和增量文件。當(dāng)它們準(zhǔn)備好后,Redis將執(zhí)行原子替換操作,使這個(gè)臨時(shí)清單文件生效。為了避免在AOF重寫(xiě)重復(fù)失敗和重試的情況下創(chuàng)建許多增量文件的問(wèn)題,Redis引入了AOF重寫(xiě)限制機(jī)制,以確保失敗的AOF重寫(xiě)以越來(lái)越慢的速度重試。?
Redis會(huì)fork一個(gè)子進(jìn)程,所以現(xiàn)在我們有了一個(gè)子進(jìn)程和一個(gè)父進(jìn)程。
子級(jí)開(kāi)始在臨時(shí)文件中寫(xiě)入新的基本AOF。
父級(jí)打開(kāi)一個(gè)新的增量AOF文件以繼續(xù)寫(xiě)入更新。如果重寫(xiě)失敗,舊的基本文件和增量文件(如果有的話)加上這個(gè)新打開(kāi)的增量文件代表了完整的更新數(shù)據(jù)集,所以我們是安全的。
當(dāng)子級(jí)完成重寫(xiě)基本文件時(shí),父級(jí)會(huì)得到一個(gè)信號(hào),并使用新打開(kāi)的增量文件和子級(jí)生成的基本文件來(lái)構(gòu)建臨時(shí)清單,并將其持久化。
利潤(rùn)現(xiàn)在Redis對(duì)清單文件進(jìn)行原子交換,以便AOF重寫(xiě)的結(jié)果生效。Redis還會(huì)清理舊的基本文件和任何未使用的增量文件。
總結(jié):
?
?三、AOF+RDB混合使用
一、同時(shí)開(kāi)啟兩種持久化方式
reds默認(rèn)是開(kāi)啟RDB持久化,而不會(huì)開(kāi)啟AOF持久化方式,如果兩者同時(shí)開(kāi)啟,redis優(yōu)先加載AOF持久化。
?二、redis加載順序
當(dāng)redis重啟的時(shí)候會(huì)優(yōu)先加載AOF文件來(lái)恢復(fù)原始的數(shù)據(jù),因?yàn)橥ǔG闆r下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集更完整。RDB的數(shù)據(jù)不實(shí)時(shí),同時(shí)使用兩者時(shí)服務(wù)器重啟也只會(huì)找AOF文件。由于RDB更適合用于備份數(shù)據(jù)庫(kù)(AOF在不斷變化不好備份),留著RDB作為一個(gè)兜底策略。
?
?
四、純緩存模式
redis并不做持久化,只用做高速緩存,禁用持久化機(jī)制可以提高性能。
1、關(guān)閉RDB:save "";禁用RDB自動(dòng)觸發(fā)模式,手動(dòng)觸發(fā)還是可以的
2、關(guān)閉AOF:appendonly no;禁用AOF寫(xiě)回策略,手動(dòng)觸發(fā)還是可以的。
?
?