Redis中的RDB和 AOF的區別

Redis中持久化技術分爲兩種,一種是RDB,一種是AOF.

這兩者有什麼區別呢?

定義的區別:

  1. RDB:RDB是每隔一段時間自動將內存中的數據集快照寫入磁盤中,也就是我們所說的Snapshot快照,他恢復(讀取)數據是將快照文件直接讀取到內存中.
  2. AOF:AOF是用日誌的形式將每一個寫操作都記錄在日誌文件中,只允許進行增量操作,不允許進行修改操作.他恢復(讀取)數據來執行過的操作重新執行一遍.

實現的區別

  1. RDB: Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。 整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能.如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最後一次持久化後的數據可能丟失.
  2. AOF:Redis中的AOF默認是不開啓的,我們可以在redis.conf 配置文件中進行編輯,開啓AOF功能,當需要對數據進行恢復操作時,將之前持久化保存的AOF文件替換掉redis保存rdb文件的目錄下,重新啓動的redis進程將AOF文件中記錄的寫操作重新執行一遍,即可恢復數據.

注: 當AOF和RDB同時開啓時,AOF優先級更高,因爲AOF恢復數據更加全面.

觸發機制的區別

  1. RBD:間隔一段時間後自動進行保存操作.默認頻率是1分鐘內改了1萬次,或5分鐘內改了10次,或15分鐘內改了1次.
  2. AOF:每進行一次寫操作,就會自動對原先的.aof文件進行增量操作.

細節上的區別

  1. RDB:在redis進行RDB持久化時,有兩種操作:save 和 bgsave; 他們的區別就是當進行save操作時,其他線程進入阻塞狀態,當持久化結束後,在進行相應,而bgsave是在持久化的同時,redis仍能響應其他請求.
  2. AOF:AOF持久化形成的.aof文件因爲是隻能進行增量操作,所以文件會越來越大,這個時候我們就需要對文件進行壓縮處理.而redis自動爲我們提供這項服務,就是Rewrite壓縮.默認是當新的.aof文件大小是原來.aof文件大小的兩倍,且文件大小>64M時觸發.

小結

  1. RDB在恢復較大的數據集的時候效率要高於AOF,因爲數據的直接覆蓋要比執行命令更快一些.
  2. RDB可能存在數據丟失的情況,當在存儲間隔期時,如果redis 宕機的話,這一時間段的數據就會丟失.而AOF會將所有的寫操作按照配置文件中的規定進行記錄,默認是立刻進行記錄,所以數據丟失情況較少.
  3. AOF因爲是就操作進行記錄,所以很容易被其他人進行破解,從而對數據進行分析.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章