Redis——持久化機制(RDB和AOF)
redis將所有資料儲存在記憶體中,為了記錄資料和操作需要持久化機制儲存到磁碟。redis中用到了兩種方式:RDB和AOF。持久化有什麼用?重啟後進行資料恢復。redis在進行資料恢復的時候都會讀取rdb或者aof檔案,將資料重新載入到記憶體。
一、RDB也叫snapshotting方式
1、機制
以快照的方式將記憶體中的資料寫入二進位制檔案中,在磁碟中會生成一個.rdb的檔案。這種方式可以設定每個多長時間進行一次快照,即按照一定的策略週期性的持久化。注意:每次都是將記憶體中的資料完整的寫入磁碟,不是增量的更新。它是非同步的。
工作原理簡單介紹一下:當redis需要做持久化時,redis會fork一個子程序;子程序將資料寫到磁碟上一個臨時RDB檔案中;當子程序完成寫臨時檔案後,將原來的RDB替換掉,這樣的好處就是可以copy-on-write(實時複製)。
2.存在的問題
如果redis宕機了,最近的資料會丟失。當業務量很大時,丟失的資料會很多。
二、AOF(append-only-file)
1.機制
redis每次將寫的命令追加到.aof檔案中,實現了全程持久化。redis重啟後執行.aof檔案進行”重放“恢復資料。
2.存在的問題
因為每次寫操作都要追加,所以會造成檔案中對某一資料的操作好很多條,但其實只是最後一條操作才有用。這樣隨著時間增加,檔案會越來越大。
3.如何解決?
為了壓縮aof持久化檔案,redis提供了bgrewriteaof命令。收到此命令後,redis將使用與快照類似的方式將記憶體中的資料以命令的方式儲存到臨時檔案,最後替換原來的檔案,來控制aof檔案的增長。
三、總結
redis的持久化機制保證了記憶體中的資料同步到磁碟,重啟時能恢復資料庫。