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