Redis持久化存儲
阿新 • • 發佈:2017-11-17
情況 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持久化存儲