redis-持久化

嗜血螞蟻發表於2018-08-17

redis持久化包括rdb和aof兩種方案

1、rdb持久化方案

  • 持久化過程:按照redis.conf檔案配置,如

save 900 1

save 300 10

save 60 10000

,在指定時間間隔內滿足資料落盤策略時候,redis會fork一個和原程式一模一樣的子程式,該程式先將資料存到一個臨時檔案裡,待持久化結束後,用臨時檔案替換上次的持久化檔案。

  • 觸發落盤:滿足配置的策略、使用flushdb、使用flushall(效果是所用資料都刪除了,落盤後dump.rdb(預設檔名,可配置)檔案內容為空)
  • 恢復資料:將dump.rdb複製到安裝redis目錄,並啟動redis的服務。(連上redis後可以使用config get dir 獲取redis的安裝目錄)

劣勢:a、在一定間隔時間落盤一次,如果redis意外down,會弔事最後一次的redis中所有修改

   b、fork的時候,記憶體中的資料被克隆了一份,大致2倍的膨脹性需要考慮

優勢:適合對資料完整性和一致性要求不高的場景;適合大規模的資料恢復

2、aof持久化方案

  •  持久化過程:按照redis.conf檔案配置,如

#appendfsync always

appendfsync everysec

#appendfsync no

,根據同步策略為everysec,則每秒將寫操作追加(讀操作不會追加)到appendonly.aof檔案。

  • 恢復資料:將appendonly.aof檔案複製到config get dir對應的目錄,並重啟redis
  • 重寫機制:appendonly.aof的內容是以追加的方式新增的,如果沒有特殊機制,該檔案會越來越大,為避免這個情況,redis針對aof持久化方式有重寫機制  

重寫過程:當aof檔案超過配置的閾值(滿足配置檔案的配置的策略),redis會fork出一個程式,該程式遍歷記憶體中的資料,每條記錄都對應一條set語句,寫入臨時的aof檔案,重寫完成後,用臨時檔案替換上次的持久化檔案。

劣勢:a、aof檔案遠大於rdb檔案

       b、資料恢復速度慢於rdb

優勢:同步策略always->每次修改同步,效能差但完整性好;同步策略everysec->每秒同步,非同步操作,如果一秒內down機會丟失資料;no->從不同步

3、疑問

如果兩種持久化方式都配置了,那麼redis重啟時候,從哪裡恢復資料呢?
從appendonly.aof檔案恢復,因為aof持久化的資料更精確

是不是隻使用aof持久化方式呢?

 

相關文章