Redis持久化機制,優缺點,如何選擇合適方式

1 什麼是Redis持久化?

持久化就是把內存的數據寫到磁盤中去,防止服務宕機了內存數據丟失。


2 Redis 的持久化機制是什麼?各自的優缺點?

Redis 提供兩種持久化機制 RDB(默認) 和 AOF 機制:

RDB:是Redis DataBase縮寫快照

RDB是Redis默認的持久化方式。按照一定的時間將內存的數據以快照的形式保存到硬盤中,對應產生的數據文件為dump.rdb。通過配置文件中的save參數來定義快照的週期。

Redis持久化機制,優缺點,如何選擇合適方式

優點:

1、只有一個文件 dump.rdb,方便持久化。2、容災性好,一個文件可以保存到安全的磁盤。3、性能最大化,fork 子進程來完成寫操作,讓主進程繼續處理命令,所以是 IO 最大化。使用單獨子進程來進行持久化,主進程不會進行任何 IO 操作,保證了 redis 的高性能4.相對於數據集大時,比 AOF 的啟動效率更高。


缺點:

1、數據安全性低。RDB 是間隔一段時間進行持久化,如果持久化之間 redis 發生故障,會發生數據丟失。所以這種方式更適合數據要求不嚴謹的時候)2、AOF(Append-only file)持久化方式: 是指所有的命令行記錄以 redis 命令請 求協議的格式完全持久化存儲)保存為 aof 文件。


觸發機制-主要三種方式

save(同步)

bgsave(異步)

自動


save命令:客戶端向Redis發送save命令來創建一個快照文件。

Redis持久化機制,優缺點,如何選擇合適方式

執行save命令的時候,如果存在老的快照文件,新的將會替換老的。

bgsave命令:客戶端向Redis發送bgsave命令,Redis調用fork創建一個子進程,

然後子進程負責將快照寫入硬盤,而父進程則繼續處理命令請求。

Redis持久化機制,優缺點,如何選擇合適方式


save命令和bgsave命令對比:

Redis持久化機制,優缺點,如何選擇合適方式


Redis持久化機制,優缺點,如何選擇合適方式

快照持久化選項:

<code>dbfilename dump-${port}.rdb
dir /bigdiskpath
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes/<code>

最佳配置:

<code>dbfilename dump-${port}.rdb
dir /bigdiskpath
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes/<code>


AOF:持久化

AOF持久化(即Append Only File持久化),則是將Redis執行的每次寫命令記錄到單獨的日誌文件中,當重啟Redis會重新將持久化的日誌中文件恢復數據。

當兩種方式同時開啟時,數據恢復Redis會優先選擇AOF恢復。

Redis持久化機制,優缺點,如何選擇合適方式

優點:

1、數據安全,aof 持久化可以配置 appendfsync 屬性,有 always,每進行一次 命令操作就記錄到 aof 文件中一次。2、通過 append 模式寫文件,即使中途服務器宕機,可以通過 redis-check-aof 工具解決數據一致性問題。3、AOF 機制的 rewrite 模式。AOF 文件沒被 rewrite 之前(文件過大時會對命令 進行合併重寫),可以刪除其中的某些命令(比如誤操作的 flushall))

缺點:

1、AOF 文件比 RDB 文件大,且恢復速度慢。2、數據集大的時候,比 rdb 啟動效率低。


優缺點比較?

  1. AOF文件比RDB更新頻率高,優先使用AOF還原數據。
  2. AOF比RDB更安全也更大
  3. RDB性能比AOF好
  4. 如果兩個都配了優先加載AOF

AOF三種策略

always:每條Redis寫命令都同步寫入硬盤。

Redis持久化機制,優缺點,如何選擇合適方式

everysec:每秒執行一次同步,將多個命令寫入硬盤。

Redis持久化機制,優缺點,如何選擇合適方式

no:由操作系統決定何時同步。

Redis持久化機制,優缺點,如何選擇合適方式


三種策略對比:生產環境中需要根據實際的需求進行選擇。


AOF重寫

隨著Redis的運行,被執行的寫命令不斷同步到AOF文件中,AOF文件的體積越來越大,極端情況將會佔滿所有的硬盤空間。如果AOF文件體積過大,還原的過程也會相當耗時。為了解決AOF文件不斷膨脹的問題,需要移除AOF文件中的冗餘命令來重寫AOF。

Redis持久化機制,優缺點,如何選擇合適方式

AOF重寫的兩種實現方式:

bgrewriteaof命令

bgrewriteaof命令和bgsave命令的工作原理相似:Redis創建一個子進程,然後由子進程負責對AOF文件進行重寫。

Redis持久化機制,優缺點,如何選擇合適方式


AOF重寫配置

配置參數說明:

Redis持久化機制,優缺點,如何選擇合適方式

具體配置:

<code>appendonly yes
appendfilename "appendonly-${port}.aof"
appendfsync everysc
dir /bigdiskpath
no-appendfsync-on-rwrite yes
auto-aof-rewrit-percentage 100
auto-aof-rewrite-min-size 64mb/<code>


3 如何選擇合適的持久化方式

一般來說, 如果想達到足以媲美PostgreSQL的數據安全性,你應該同時使用兩種持久化功能。在這種情況下,當 Redis 重啟的時候會優先載入AOF文件來恢復原始的數據,因為在通常情況下AOF文件保存的數據集要比RDB文件保存的數據集要完整。

如果你非常關心你的數據, 但仍然可以承受數分鐘以內的數據丟失,那麼你可以只使用RDB持久化。

有很多用戶都只使用AOF持久化,但並不推薦這種方式,因為定時生成RDB快照(snapshot)非常便於進行數據庫備份, 並且 RDB 恢復數據集的速度也要比AOF恢復的速度要快,除此之外,使用RDB還可以避免AOF程序的bug。

如果你只希望你的數據在服務器運行的時候存在,你也可以不使用任何持久化方式。


4 Redis持久化數據和緩存怎麼做擴容?

如果Redis被當做緩存使用,使用一致性哈希實現動態擴容縮容。

如果Redis被當做一個持久化存儲使用,必須使用固定的keys-to-nodes映射關係,節點的數量一旦確定不能變化。否則的話(即Redis節點需要動態變化的情況),必須使用可以在運行時進行數據再平衡的一套系統,而當前只有Redis集群可以做到這樣。


分享到:


相關文章: