該持久化方式實際是在redis內部乙個定時器事件,每隔固定時間去檢查當前資料發生的改變次數與時間是否滿足配置的持久化觸發的條件,如果滿足則通過作業系統fork呼叫來建立出乙個子程序,這個子程序缺省會與父程序共享相同的位址空間,這時就可以通過子程序來遍歷整個記憶體來進行儲存操作,而主程序則仍然可以提供服務,當有寫入時由作業系統按照記憶體頁(page)為單位來進行copy-on-write保證父子程序之間不會互相影響。
該持久化的主要缺點是定時快照只是代表一段時間內的記憶體映像,所以系統重啟會丟失上次快照與重啟之間所有的資料。
aof方式實際類似mysql的基於語句的binlog方式,即每條會使redis記憶體資料發生改變的命令都會追加到乙個log檔案中,也就是說這個log檔案就是redis的持久化資料。
aof的方式的主要缺點是追加log檔案可能導致體積過大,當系統重啟恢復資料時如果是aof的方式則載入資料會非常慢,幾十g的資料可能需要幾小 時才能載入完,當然這個耗時並不是因為磁碟檔案讀取速度慢,而是由於讀取的所有命令都要在記憶體中執行一遍。另外由於每條命令都要寫log,所以使用aof 的方式,redis的讀寫效能也會有所下降。
虛擬記憶體方式是redis來進行使用者空間的資料換入換出的乙個策略,此種方式在實現的效果上比較差,主要問題是**複雜,重啟慢,複製慢等等.
diskstore方式是作者放棄了虛擬記憶體方式後選擇的一種新的實現方式,也就是傳統的b-tree的方式,目前仍在實驗階段,後續是否可用我們可以拭目以待。
當業務不需要資料持久化時,當然關閉所有的持久化方式可以獲得最佳的效能以及最大記憶體的使用量;如果需要使用持久化,根據是否可以容忍重啟丟失部分資料在快照方式與語句追加方式之間選擇其一,不要使用虛擬記憶體以及diskstore方式。目前來說,個人覺得選擇aof的方式是最佳的選擇。
難以取捨的持久化機制主要是快照和aof方式。相比於aof快照的特點是速度快,恢復的速度也快。但是宕機的時候丟失的資料相對多一點。
當aof和快照同時開啟的時候。
資料恢復時會首先使用 aof的檔案來恢復,恢復失敗的時候再去考慮快照。
Redis 持久化機制
持久化資料 就是將記憶體中的資料寫入到硬碟裡面,原因 為了之後重用資料 比如重啟機器 機器故障之後恢復資料 或者是為了防止系統故障而將資料備份到乙個遠端位置 redis通過快照來獲得在某個時間點上記憶體裡面的資料副本。redis建立快照之後,可以對快照進行備份,可以將快照複製到其他伺服器從而建立具有...
Redis的持久化機制
redis由於支援非常豐富的記憶體資料結構型別,如何把這些複雜的記憶體組織方式持久化到磁碟上是乙個難題,所以redis的持久化方式與傳統資料庫的方式有比較多的差別,redis一共支援四種持久化方式,分別是 在設計思路上,前兩種是基於全部資料都在記憶體中,即小資料量下提供磁碟落地功能,而後兩種方式則是...
Redis 的持久化機制
redis 的持久化策略有兩種 rdb 快照形式是直接把記憶體中的資料儲存到乙個 dump 的檔案中,定時儲存,儲存策略。aof 把所有的對 redis 的伺服器進行修改的命令都存到乙個檔案裡,命令的集合。redis 預設是快照 rdb 的持久化方式。當 redis 重啟的時候,它會優先使用 aof...