Redis持久化機制


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查看,其實里面保存的就是我們剛才新加的命令.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM