標籤:
Redis是一個支援持久化的記憶體資料庫,也就是說Redis需要經常將記憶體中的資料同步到硬碟來保證持久化.
Redis支援兩種持久化方式:
1. Snapshot(快照),也是預設;
這種方式是將記憶體中資料以快照的方式寫入二進位檔案中,預設的檔案名稱為dump.rdb.可以通過配置設定自動做快照持久化的方式.
save 900 1 #900秒內如果超過1個key被修改,則發起快照
save 300 10 #300秒內如果超過10個key被修改,則發起快照
save 60 10000 #60秒內如果超過10000個key被修改,則發起快照
我們可以看到,剛裝完Redis的時候沒有dump.rdb檔案,滿足快照要求後,系統會自動產生dump.rdb,且檔案類型為二進位檔案.
2.Append-only file(aof)方式;
由於快照方式是在一定間隔時間做一次的,所以如果Redis意外down掉的話,就會丟失最後一次快照後的所有修改.
aof比快照方式有更好的持久化性,是由於使用aof時,Redis會將每一個收到的命令都通過write函數追加到檔案中,當Redis重啟時會通過重新執行檔案中儲存的
寫命令來在記憶體中重建整個資料庫內容.
當然由於os會在核心中緩衝write做的修改,所以可能不是立即寫到磁碟上.這樣aof方式的持久化也是有可能丟失部分修改
可以通過設定檔告訴Redis我們想要通過fsync函數強制os寫入磁碟的時機.
appendfsync always #收到命令立即寫入磁碟,效率最慢,但是保證完全的持久化
appendfsync everysec #每秒鐘寫入磁碟一次,在效能和持久化方面做了很好的折中
appendfsync no #完全依賴os,效能最好,持久化沒保證
我們來在shell看一下:
編輯Redis.conf檔案,修改appendonly no為appendonly yes
再次啟動Redis,增加一個key
我們可以看到系統自動產生了一個appendonly.aof檔案,且非二進位,我們用cat查看,其實裡面儲存的就是我們剛才新加的命令.
Redis持久化機制