Redis持久化機(jī)制?
為了能夠重用Redis數(shù)據(jù),或者防止系統(tǒng)故障,我們需要將Redis中的數(shù)據(jù)寫入到磁盤空間中,即持久化。Redis提供了兩種不同的持久化方法可以將數(shù)據(jù)存儲(chǔ)在磁盤中,一種叫快照RDB,另一種叫只追加文件AOF。
RDB
在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤(Snapshot),它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里。
優(yōu)勢(shì):適合大規(guī)模的數(shù)據(jù)恢復(fù);對(duì)數(shù)據(jù)完整性和一致性要求不高
劣勢(shì):在一定間隔時(shí)間做一次備份,所以如果Redis意外down掉的話,就會(huì)丟失最后一次快照后的所有修改。
AOF
以日志的形式來記錄每個(gè)寫操作,將Redis執(zhí)行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,Redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù),換言之,Redis重啟的話就根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作。
AOF采用文件追加方式,文件會(huì)越來越大,為避免出現(xiàn)此種情況,新增了重寫機(jī)制,當(dāng)AOF文件的大小超過所設(shè)定的閾值時(shí),Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集。
優(yōu)勢(shì)
每修改同步:appendfsync always 同步持久化,每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤,性能較差但數(shù)據(jù)完整性比較好。
每秒同步:appendfsync everysec 異步操作,每秒記錄,如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失。
不同步:appendfsync no 從不同步。
劣勢(shì)
相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件,恢復(fù)速度慢于rdb。
aof運(yùn)行效率要慢于rdb,每秒同步策略效率較好,不同步效率和rdb相同。
如何選擇RDB和AOF
如果是數(shù)據(jù)不那么敏感,且可以從其他地方重新生成補(bǔ)回的,那么可以關(guān)閉持久化。
如果是數(shù)據(jù)比較重要,不想再?gòu)钠渌胤将@取,且可以承受數(shù)分鐘的數(shù)據(jù)丟失,比如緩存等,那么可以只使用RDB。
如果是用做內(nèi)存數(shù)據(jù)庫(kù),要使用Redis的持久化,建議是RDB和AOF都開啟,或者定期執(zhí)行bgsave做快照備份,RDB方式更適合做數(shù)據(jù)的備份,AOF可以保證數(shù)據(jù)的不丟失。
Redis4.0 對(duì)于持久化機(jī)制的優(yōu)化
Redis4.0相對(duì)與3.X版本其中一個(gè)比較大的變化是4.0添加了新的混合持久化方式。
簡(jiǎn)單的說:新的AOF文件前半段是RDB格式的全量數(shù)據(jù)后半段是AOF格式的增量數(shù)據(jù),如下圖:
優(yōu)勢(shì):混合持久化結(jié)合了RDB持久化 和 AOF 持久化的優(yōu)點(diǎn),
由于絕大部分都是RDB格式,加載速度快,同時(shí)結(jié)合AOF,增量的數(shù)據(jù)以AOF方式保存了,數(shù)據(jù)更少的丟失。
劣勢(shì):兼容性差,一旦開啟了混合持久化,在4.0之前版本都不識(shí)別該aof文件,同時(shí)由于前部分是RDB格式,閱讀性較差。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3025瀏覽量
74056 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3799瀏覽量
64396 -
Redis
+關(guān)注
關(guān)注
0文章
375瀏覽量
10878
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論