Redis是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到硬盤來保證持久化。Redis支持兩種持久化方式:redis
1、snapshotting(快照)方式
快照是默認的持久化方式。這種方式是將內存中數據以快照的方式寫入到二進制文件中,默認的文件名爲dump.rdb。咱們能夠配置redis在n秒內若是超過若干個key被修改就自動作快照持久保存。數據庫
在約87行,有默認的快照策略(指定在多長時間內,有多少次更新操做,就將數據同步到數據快照文件,能夠多個條件配合,客戶端也可使用 save 命令強制當即保存快照):
save 900 1 # 在900秒內有1個key更新,就寫入快照文件
save 300 10 # 在300秒內有10個key更新,就寫入快照文件
save 60 10000 # 在60秒內有10000個key更新,就寫入快照文件緩存
# 是否採用LZF方式壓縮存儲快照文件?
# 默認採用壓縮存儲(yes),壓縮存儲會更多的耗費CPU資源;
# 若是你想節省一些CPU資源,能夠設置爲不採用壓縮存儲(no),但這樣會致使快照文件體積變的很大(利弊請本身權衡);
rdbcompression yes # 默認app
# 快照文件
dbfilename dump.rdb # 默認文件名
# dbfilename /usr/local/redis/dbbak/dump.rdb # 若是須要也能夠顯式指定存儲位置,這樣的話dir配置選項會無效了函數
# 指定本地數據庫存放目錄(快照文件和aof文件存儲目錄)
dir ./ # 默認數據庫快照文件、aof文件存儲目錄是當前目錄
dir /usr/local/redis/dbbak/ # 也能夠顯式指定快照文件、aof文件的存儲目錄性能
2、append-only file(縮寫aof)方式
因爲快照方式是在必定間隔時間作一次的,因此若是redis意外down掉的話,就會丟失最後一次快照後的全部修改。
aof比快照方式有更好的持久化性,是因爲在使用aof時,redis會將每個收到的寫命令都經過write函數追加到文件中,當redis重啓時會經過從新執行aof文件中保存的「增刪改」命令,而在內存中重建整個數據庫內容。內存
因爲OS會在內核中緩存write作的修改,因此可能不是當即寫到磁盤上。這樣aof方式的持久化也仍是有可能會丟失部分修改。解決方式是能夠經過配置文件告訴redis咱們想要經過fsync函數強制OS寫入到磁盤的時機。資源
# aof 總開關
在約283行找到 appendonly no 默認是關閉狀態,如需將其啓用改成:
appendonly yes同步
# aof文件存儲路徑
# appendfilename appendonly.aof # 默認文件名
# appendfilename /usr/local/redis/dbbak/appendonly.aof # 若是須要指定路徑可顯式指定修改,這樣的話dir配置選項會無效了it
# aof 方式 在約309行
# appendfsync always # 收到寫命令就當即寫入磁盤,最慢,可是保證徹底的持久化
appendfsync everysec # 每秒鐘寫入磁盤一次,在性能和持久化方面作了很好的折中(默認,推薦)# appendfsync no # 徹底依賴os,性能最好,持久化沒保證