1. 程式人生 > 其它 >redis持久化的幾種方式

redis持久化的幾種方式

1、前言

Redis是一種高階key-value資料庫,包括字串型別、雜湊型別、佇列型別、集合型別和有序集合型別。

由於Redis的資料都存放在記憶體中,如果沒有配置持久化,redis重啟後資料就全丟失了,於是需要開啟redis的持久化功能,將資料儲存到磁碟上,當redis重啟後,可以從磁碟中恢復資料。

redis提供兩種方式進行持久化

一種是RDB持久化:RDB持久化是把當前程序資料生成快照儲存到硬碟的過程,觸發RDB持久化過程分為手動觸發和自動觸發。

AOF(append only file)持久化:以獨立日誌的方式記錄每次寫和刪命令, 重啟時再重新執行AOF檔案中的命令達到恢復資料的目的。

AOF的工作流程操作:命令寫入 (append)、檔案同步(sync)、檔案重寫(rewrite)、重啟載入 (load)

1)所有的寫入命令會追加到aof_buf(緩衝區)中。

2)AOF緩衝區根據對應的策略向硬碟做同步操作。

3)隨著AOF檔案越來越大,需要定期對AOF檔案進行重寫,達到壓縮的目的。

4)當Redis伺服器重啟時,可以載入AOF檔案進行資料恢復。

2、二者的區別

RDB持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork一個子程序,先將資料集寫入臨時檔案,寫入成功後,再替換之前的檔案,用二進位制壓縮儲存。

AOF持久化以日誌的形式記錄伺服器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文字的方式記錄,可以開啟檔案看到詳細的操作記錄。

3、二者優缺點

RDB存在哪些優勢呢?

RDB是一個緊湊壓縮的二進位制檔案,代表Redis在某個時間點上的資料 快照。非常適用於備份,全量複製等場景。

Redis載入RDB恢復資料遠遠快於AOF的方式。

RDB的缺點:

RDB方式資料沒辦法做到實時持久化/秒級持久化。

AOF的優勢有哪些呢?

1). 該機制可以帶來更高的資料安全性,即資料永續性。即每次發生的資料變化都會被立即記錄到磁碟中。

2). 由於該機制對日誌檔案的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌檔案中已經存在的內容。

3). 如果日誌過大,Redis可以自動啟用rewrite機制。

4). AOF包含一個格式清晰、易於理解的日誌檔案用於記錄所有的修改操作。事實上,我們也可以通過該檔案完成資料的重建。

4、常用配置

RDB持久化配置

Redis會將資料集的快照dump到dump.rdb檔案中。此外,我們也可以通過配置檔案來修改Redis伺服器dump快照的頻率,在開啟6379.conf檔案之後,我們搜尋save,可以看到下面的配置資訊:

save 900 1 #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump記憶體快照。

save 300 10 #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump記憶體快照。

save 60 10000 #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。

AOF持久化配置

在Redis的配置檔案中存在三種同步方式,它們分別是:

appendfsync always #每次有資料修改發生時都會寫入AOF檔案。

appendfsync everysec #每秒鐘同步一次,該策略為AOF的預設策略。

appendfsync no #從不同步。高效但是資料不會被持久化。

本章重點回顧

1)Redis提供了兩種持久化方式:RDB和AOF。

2)RDB使用一次性生成記憶體快照的方式,產生的檔案緊湊壓縮比更高,因此讀取RDB恢復速度更快。由於每次生成RDB開銷較大,無法做到實時持久化,一般用於資料冷備和複製傳輸。

3)AOF通過追加寫命令到檔案實現持久化,通過appendfsync引數可以控制實時/秒級持久化。因為需要不斷追加寫命令,所以AOF檔案體積逐漸變大,需要定期執行重寫操作來降低檔案體積。