redis的持久化方案
Redis的高性能是由於其將所有數據都存儲在了內存中,為了使Redis在重啟之後仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。可以單獨使用其中一種或將二者結合使用。
RDB
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的數據進行快照並持久化到硬盤。
RDB是Redis默認采用的持久化方式,在redis.conf配置文件中默認有此下配置:
save 900 1
save 300 10
save 60 10000
save 開頭的一行就是持久化配置,可以配置多個條件(每行配置一個條件),每個條件之間是“或”的關系,“save 900 1”表示15分鐘(900秒鐘)內至少1個鍵被更改則進行快照,“save 300 10”表示5分鐘(300秒)內至少10個鍵被更改則進行快照。
在redis.conf中:
配置dir指定rdb快照文件的位置
配置dbfilenam指定rdb快照文件的名稱
Redis啟動後會讀取RDB快照文件,將數據從硬盤載入到內存。根據數據量大小與結構和服務器性能不同,這個時間也不同。通常將記錄一千萬個字符串類型鍵、大小為1GB的快照文件載入到內存中需要花費20~30秒鐘。
問題總結:
通過RDB方式實現持久化,一旦Redis異常退出,就會丟失最後一次快照以後更改的所有數據。這就需要開發者根據具體的應用場合,通過組合設置自動快照條件的方式來將可能發生的數據損失控制在能夠接受的範圍。如果數據很重要以至於無法承受任何損失,則可以考慮使用AOF方式進行持久化。
AOF持久化(一般不使用)
默認情況下Redis沒有開啟AOF(append only file)方式的持久化,可以通過appendonly參數開啟:
appendonly yes
開啟AOF持久化後每執行一條會更改Redis中的數據的命令,Redis就會將該命令寫入硬
盤中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數設置的,默認的文件名是appendonly.aof,可以通過appendfilename參數修改:appendfilename appendonly.aof
對比:
rdg:可以設置間隔多長時間保存一次(redis不用任何配置默認的持久化方案)
優點:讓redis的數據存取速度變快
缺點:服務器斷電時會丟失部分數據(數據的完整性得不到保障)
aof:可以設置實時保存
優點:持久化良好,能夠保障數據的完整性
缺點:大大降低了redis系統的存取速度
redis的持久化方案