
1. 為什么要持久化
Redis是基于記憶體存盤的資料庫,如果遇到服務重啟或者崩潰,記憶體中的資料將會被清空,所以為了確保資料安全性和可靠性,我們需要將記憶體中的資料持久化到磁盤上,
持久化不僅可以防止由于系統故障、重啟或者其他原因導致的資料丟失,還可以用于備份、資料恢復和遷移等操作,
2. Redis持久化機制概述
Redis提供了兩種主要的持久化機制:RDB持久化和AOF持久化,此外,還可以采用混合持久化(RDB + AOF)的方式,將這兩種持久化方式結合在一起,下面我們簡要概述這些持久化機制,
2.1 RDB持久化
RDB(Redis DataBase)持久化是一種基于快照的持久化方式,在指定的時間間隔內,如果滿足一定條件(如某段時間內發生的寫操作次數),Redis會生成一個包含當前記憶體資料的RDB檔案,這個RDB檔案可以用于資料恢復或備份,RDB持久化提供了較高的資料壓縮率和快速的資料加載速度,但可能存在一定程度的資料丟失,
2.2 AOF持久化
AOF(Append Only File)持久化是一種基于日志的持久化方式,Redis將所有的寫操作命令記錄到一個AOF檔案中,當Redis重新啟動時,可以通過重放AOF檔案中的命令來恢復資料,AOF持久化提供了更高的資料安全性,可以保證資料的完整性,然而,與RDB持久化相比,AOF檔案通常較大,資料加載速度較慢,
2.3 混合持久化(RDB + AOF)
混合持久化結合了RDB持久化和AOF持久化的優點,可以在保證資料安全性的同時,提供較快的資料加載速度,在這種持久化方式下,Redis會同時生成RDB檔案和AOF檔案,當Redis重新啟動時,優先使用AOF檔案恢復資料,以確保資料的完整性,混合持久化適用于對資料安全性和性能要求較高的場景,
3. RDB持久化
3.1 RDB持久化原理
RDB持久化是基于快照的持久化,把當前時刻全量資料持久化到磁盤上,最終生成一個RBD檔案,
3.2 RDB持久化觸發方式
RDB持久化可以通過以下幾種方式觸發:
-
手動觸發:使用
SAVE或BGSAVE命令,SAVE是同步命令,執行程序中會阻塞其他請求,BGSAVE是異步命令,主行程會forks一個子行程,進行異步持久化,持久化程序中主行程仍然可以處理其他請求, -
自動觸發:在組態檔中設定觸發條件,redis.conf配置如下:
# 900s內至少有一次寫操作 save 900 1 # 300s內至少有1次寫操作 save 300 10 # 60s內至少有10000次寫操作 save 60 10000 -
關閉Redis時觸發:Redis在關閉服務時會自動觸發一次RDB持久化,
-
主從同步時觸發:當從節點連接到主節點時,主節點會觸發一次RDB持久化,并將生成的RDB檔案發送給從節點進行同步,
3.3 RDB持久化優缺點
RDB持久化具有以下優點:
- 高性能:由于采用子行程進行磁盤操作,主行程無需進行磁盤IO,保證了Redis的高性能,
- 快速恢復:RDB檔案包含了某一時刻的完整資料快照,可以快速恢復資料,
- 更小的存盤空間:RDB檔案經過壓縮,占用較小的磁盤空間,
RDB持久化的缺點包括:
- 資料丟失:由于RDB持久化是基于時間間隔的,可能存在一定程度的資料丟失,
- 子行程占用記憶體:在生成RDB檔案程序中,子行程會占用和主行程相同的記憶體空間,可能導致記憶體不足的問題,
4. AOF持久化
4.1 AOF持久化原理
AOF(Append Only File)持久化是一種基于日志的持久化方式,Redis將所有的寫操作命令追加到一個AOF檔案中,當Redis重新啟動時,可以通過重放AOF檔案中的命令來恢復資料,
4.2 AOF持久化配置
AOF持久化的配置主要包括以下幾個方面:
-
啟用AOF持久化:在組態檔中設定
appendonly yes,# 開啟aof持久化 appendonly yes # aof檔案名 appendfilename "appendonly.aof" -
AOF檔案同步策略:在組態檔中設定
appendfsync選項,可選值包括:always:每次寫操作都同步到磁盤,保證最高的資料安全性,但性能較差,everysec:每秒同步一次磁盤,提供較好的資料安全性和性能平衡,no:由作業系統決定何時同步磁盤,性能最好,但資料安全性較差,
# 持久化策略,always表示每次寫入都進行持久化 appendfsync always -
AOF重寫策略:在redis.conf檔案中進行配置,控制AOF重寫的觸發條件,
# 指定在執行BGSAVE或BGREWRITEAOF命令時是否禁用AOF檔案同步,默認為yes,表示禁用同步, no-appendfsync-on-rewrite yes # 定AOF檔案大小增長到原始大小的百分比時進行重寫, # 默認為100,表示AOF檔案大小增長到原始大小的兩倍時進行重寫, auto-aof-rewrite-percentage 100 # 指定進行AOF重寫的最小AOF檔案大小,默認為64mb, auto-aof-rewrite-min-size 64
4.3 AOF重寫(Rewrite)
隨著寫操作的不斷進行,AOF檔案會不斷增長,為了減小AOF檔案的大小,Redis提供了AOF重寫功能,AOF重寫會創建一個新的AOF檔案,只包含當前記憶體中資料的最小命令集,在重寫程序中,Redis會繼續將新的寫操作追加到原始AOF檔案中,當重寫完成后,新的AOF檔案將替換原始AOF檔案,
可以手動執行bgrewriteaof命令,觸發AOF重寫,
redis> bgrewriteaof
4.4 AOF持久化優缺點
AOF持久化具有以下優點:
- 更高的資料安全性:根據同步策略的選擇,AOF持久化可以保證較高的資料安全性,
- 更好的容錯性:即使AOF檔案存在部分損壞,仍可以恢復大部分資料,
AOF持久化的缺點包括:
- 較大的存盤空間:與RDB持久化相比,AOF檔案通常較大,占用較多磁盤空間,
- 資料加載速度較慢:由于需要重放AOF檔案中的命令,資料恢復速度相對較慢,
5. 混合持久化
RDB持久化加載速度快,AOF持久化資料更安全,有沒有一種持久化方式結合兩者的優點?
當然有,就是混合持久化,
5.1 混合持久化原理
Redis首先使用RDB持久化將記憶體中的資料快照存盤到磁盤上,然后再使用AOF持久化將所有新的寫操作追加到AOF檔案中,這樣做的好處是:
- 在系統崩潰時,可以通過RDB檔案進行快速的恢復,而AOF檔案可以用于恢復最近的修改,
- RDB持久化可以減少AOF檔案的大小,從而減少磁盤空間的使用,
- 在RDB持久化中,Redis可以使用子行程來將快照寫入磁盤,這樣可以避免主行程的阻塞,
5.2 混合持久化優缺點
混合持久化具有以下優點:
- 高資料安全性:結合了AOF持久化的高資料安全性,
- 快速恢復:利用RDB持久化的快速資料恢復速度,
- 提高從節點同步效率:利用RDB檔案進行快速同步,
混合持久化的缺點包括:
較大的存盤空間:需要同時維護RDB檔案和AOF檔案,可能占用較多的磁盤空間,
5.3 混合持久化應用場景
混合持久化適用于對資料安全性和性能要求較高的場景,尤其是在以下情況:
- 需要確保資料完整性,不能容忍資料丟失,
- 需要快速恢復資料,以減少故障恢復時間,
- 需要提高主從同步效率,以保證高可用性和負載均衡,
6. 持久化方案選擇
6.1 持久化方案對比
| 持久化方式 | RDB | AOF |
|---|---|---|
| 原理 | 通過定期生成資料快照實作持久化 | 通過記錄所有寫操作命令實作持久化 |
| 資料安全性 | 可能會丟失最近一次快照以來的資料 | 更高,可通過配置同步策略降低資料丟失風險 |
| 恢復速度 | 較快,因為RDB檔案是一個資料快照 | 較慢,需要逐條執行AOF檔案中的命令 |
| 存盤空間 | 一般較小,因為RDB檔案經過壓縮 | 一般較大,但可以通過AOF重寫減小檔案大小 |
| 性能影響 | 較小,因為快照生成程序較短 | 可能較大,但可通過配置同步策略降低性能影響 |
| 主從同步 | 使用RDB檔案進行同步,同步速度較快 | 使用AOF檔案進行同步,同步速度可能較慢 |
| 應用場景 | 適用于對資料安全性要求較低、恢復速度要求較高的場景 | 適用于對資料安全性要求較高、可接受較慢恢復速度的場景 |
如果同時開啟了RDB和AOF持久化,Redis優先使用AOF持久化,因為AOF持久化可以保證更高的資料安全性和靈活性,而RDB持久化適用于資料恢復的場景,
6.2 持久化方案選擇
在選擇Redis持久化方案時,需要根據實際業務需求和場景權衡各個方案的優缺點,
- 資料安全性要求:如果你的業務對資料安全性要求較高,建議使用AOF持久化或混合持久化,AOF持久化可以通過設定同步策略來保證不同程度的資料安全性,
- 資料恢復速度:如果你的業務需要快速恢復資料,以減少故障恢復時間,建議使用RDB持久化或混合持久化,RDB檔案包含某一時刻的完整資料快照,可以快速恢復資料,
- 存盤空間考慮:如果磁盤空間有限,可以考慮使用RDB持久化,因為RDB檔案經過壓縮,占用較小的磁盤空間,然而,如果資料安全性要求較高,可以考慮使用混合持久化,盡管這會增加存盤空間的占用,
- 主從同步效率:如果你使用了Redis主從架構,需要考慮主從同步效率,混合持久化可以利用RDB檔案進行快速同步,提高從節點的同步效率,
- 性能考慮:RDB持久化和混合持久化可以在很大程度上保持Redis的高性能,如果選擇AOF持久化,請選擇合適的同步策略以平衡性能和資料安全性,
7. 總結
本文介紹了Redis的三種持久化機制:RDB持久化、AOF持久化和混合持久化,
RDB持久化通過定期生成資料快照實作持久化,具有快速恢復和更小的存盤空間等優點,但可能存在資料丟失和子行程占用記憶體等缺點,
AOF持久化通過記錄所有寫操作命令實作持久化,具有更高的資料安全性和更好的容錯性等優點,但可能存在較大的存盤空間和資料加載速度較慢等缺點,
混合持久化結合了RDB持久化和AOF持久化的優點,適用于對資料安全性和性能要求較高的場景,
在選擇Redis持久化方案時,需要根據實際業務需求和場景權衡各個方案的優缺點,
我是「一燈架構」,如果本文對你有幫助,歡迎各位小伙伴點贊、評論和關注,感謝各位老鐵,我們下期見

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/550723.html
標籤:NoSQL
下一篇:返回列表
