1. 程式人生 > >Redis持久化存儲

Redis持久化存儲

情況 slave 臨時 命令 決定 ever 出錯 建議 lena

技術分享

Redis是一個支持持久化的內存數據庫,也就是說redis需要經常將內存中的數據同步到磁盤來保證持久化。redis支持四種持久化方式,一是 Snapshotting(快照)也是默認方式;二是Append-only file(縮寫aof)的方式;三是虛擬內存方式;四是diskstore方式。下面分別介紹之。

一、RBD(快照)

原理

在某個時間點將內存中的數據寫入一個磁盤的臨時文件,持久化結束後,用這個臨時文件替換上次持久化的文件。

配置文件

save 900 1                              # 在900秒內如果鍵值修改過1次就快照
save 300 10                             # 在300秒內如果鍵值修改過10次就快照
save 60 10000                           # 在60秒內鍵值修改過10000次就快照

stop-writes-on-bgsave-error yes         # 後臺備份出錯時,是否禁止新的寫入操作?
如果不禁止容易造成數據不一致
rdbcompression yes                      # 導出的rdb文件是否壓縮
rdbchecksum yes                         # 恢復時導入rdb文件是否檢驗完整性、是否檢驗版本是否一致
dbfilename dump.rdb                     # 導出來得rdb文件名
dir /var/lib/redis                      # rdb的存放路徑

二、AOF

原理

通過將發送到服務器的寫操作命令記錄下來,形成AOF文件,此文件只許追加不能修改,Redis啟動時會讀取AOF文件後重構數據(重新執行一遍)。文件默認名稱是appendonly.aof

配置文件

appendonly no                           # 是否開啟aof功能
appendfilename "appendonly.aof"         # 文件名

appendfsync always                      # 只要一修改就同步至緩沖區,並同步至磁盤
appendfsync everysec                    # 每秒將數據同步至緩沖區,並同步至磁盤
appendfsync no                          # redis不設定同步策略,由內核設定的參數決定是否同步

no-appendfsync-on-rewrite no            # appendfsync設定為always或everysec的話,還要不要同步磁盤

auto-aof-rewrite-percentage 100         # 每隔多久重構aof文件,單位秒
auto-aof-rewrite-min-size 64mb          # aof文件最小為多少時重構一次aof文件。搭配上一條使用

aof-load-truncated yes                  # 崩潰修復後自動進行全備

aof重寫、重構

將大量重復的命令合並成一條命令,而不必頻繁的去重新執行每一條命令.
技術分享

三、AOF對比RDB

AOF更加安全,可以將數據即時同步到文件中,但是消耗磁盤I/O,效率低
Snapshot更高效,它是服務器在正常運行情況下數據同步最佳手段,文件尺寸小,效率高,安全性低

註:RDB與AOF同時開啟  默認使用AOF來恢復數據

四、常用架構

  • 架構良好的環境中:Master使用AOF,Slave使用snapshot。原因是主要確保數據完整,從要速度快。
  • 網絡環境較差:建議使用master與slave同時使用AOF更加安全
  • 網絡良好、需要收密集型寫操作:建議Master采用snapshot,Slave采用AOF

Redis持久化存儲