Redis是一個支持持久化的內存數據庫,也就是說Redis須要常常將內存中的數據同步到硬盤來保證持久化。redis
將內存中的數據以快照的方式寫到二進制文件中。默認名爲:dump.rdb。數據庫
能夠手動配置Redis在n秒內若是超過m個key被修改過,就自動作快照。如:
save 900 1 //意思是,若是在900秒以內超過1個key被修改過,則發起快照保存。
redis.conf配置文件默認爲:緩存
save 900 1 save 300 10 save 60 10000
因爲快照方式是在必定間隔時間作一次的,因此若是Redis意外崩潰的話,就會丟失最後一次快照後的全部修改。
aof能夠比快照作到更好的持久化,是因爲在使用aof時,redis會將每個收到的寫命令都經過write函數追加到文件中,當Redis重啓時會從新執行文件中保存的寫命令,從而在內存中重建整個數據庫的內容。app
固然,因爲os會在內核中緩存write作的修改,因此可能不是當即寫到磁盤上。這樣aof方式的持久化也仍是有可能會丟失部分修改。能夠經過配置文件告訴Redis,咱們想要經過fsync函數強制os寫入到磁盤的時機。
修改配置文件:
appendonly yes //啓用aof持久化方式
下面有三個選項,分別是:
# appendfsync always //收到寫命令就馬上寫入磁盤,最慢,可是保證徹底的持久化。
appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面作了很好的折中。
# appendfsync no //徹底依賴os,性能最好,持久化沒保證。
設置完畢以後,重啓Redis服務。能夠看到生成了一個新的文件: appendonly.aof函數
[root@myCentos redis]# ls /usr/local/redis/ appendonly.aof bin dump.rdb etc
小結:snapshotting保存的是數據,而aof保存的是寫命令操做。性能
學PHP的小螞蟻 原創博客 http://my.oschina.net/woshixiaomayi/blog.net