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