有了AOF為什么還需要RDB?
上一篇我們介紹了Redis AOF持久化策略。Redis能保證數據不丟失嗎之AOF
AOF雖然能實現持久化,但由于AOF恢復數據的時候是一條一條命令重新執行的,但數據量大的時候,Redis數據恢復的時間就會很久,這會導致Redis在重啟的時候,有一大段時間的不可用,這很明顯是不能接受的。
為此Redis引入了RDB快照。
RDB是什么
RDB是一種內存快照,Redis將某一時刻中的內存中所有的數據保存在一個RDB文件中。由于RDB保存的是數據,而不是命令,所以Redis重啟恢復數據時,只需要將RDB文件加載到內存中就可以恢復數據。
快照指某一時刻被定格的數據,就像我們拍照一樣,咔嚓一聲,那一時刻的畫面就被記錄下倆了。
但做生成RDB文件的過程中,Redis還是會繼續處理寫請求的,那怎么辦保證數據不變呢?
其實RDB的生成也是利用fork 寫時復制的特點實現的,fork一個子進程,子進程剛開始與父線程共享一個內存空間,當Redis處理寫請求時,此時會復制一個新的內存空間,在新的內存空間進行修改。而RBD所使用的數據還是之前的數據,不會受到影響。
當然,這里也有一個注意的點,因為使用到了fork,fork的瞬間是會阻塞主線程的,阻塞的時間跟當前內存數據大小有關,這一點在AOF的那篇文章中有講過,這里就