Redis持久化

Redis持久化

持久化是爲了數據重用或者防止系統崩潰後數據丟失,甚至就是保存計算後的結果方便使用等。redis支持兩種方式來進行持久化將數據寫入磁盤,分別是 快照以及aof。redis

1.快照

  • 什麼是快照服務器

    快照就是獲取存儲在內存中的數據在某個時間點的副本,在建立快照後,用戶能夠對快照進行備份,能夠將快照放到其他服務器上進行恢復數據或者建立數據,還能夠放在本地,方便系統重啓後恢復數據併發

  • 如何觸發快照app

    1. 經過redis.conf配置文件中配置 save 觸發選項來觸發,第二個參數表示多長時間,以秒爲單位,第三個參數是寫入次數,例如 save 60 10000 意思是 在60秒內寫入了10000次就會觸發 快照,若是設置了多個save,則只要知足其中要給條件都會建立一個快照性能

    2. 在redis客戶端執行 bgsave 命令,服務器在接收到該命令後不會阻塞客戶端的請求,會fork一個子進程來對數據進行備份操作系統

    3. 在redis客戶端執行 save命令,服務器在接收到該命令後會中止接收客戶端請求,知道備份完成後纔會繼續接收客戶端請求,通常該方法使用很少,在服務器內存不夠用的狀況下,執行save命令線程

    4. 在使用shutdown等命令後,服務端會當即使用 save命令模式,再也不接受任何而客戶端請求,等待備份完成後關係服務器日誌

    5. 當有兩臺服務器,其中一臺服務器鏈接另外一個服務器,併發送了一個 sync同步命令後,那麼主服務器會執行 bgsave模式進程

  • 快照的優處內存

    1. 經過快照的方式能夠生成多個儲存文件,將這些文件放到別的服務器上能夠快速恢復數據。
    2. 生成快照佔用io資源少,不用頻繁寫操做,只用fork一個子線程操做便可。
    3. 相對於aof方式來講,直接基於快照的方式恢復和重啓redis進程更加快速。
  • 快照的劣勢

    1. 快照默認是根據某個時間段寫入頻率來觸發建立,這意味着若是在建立一個快照後,尚未到下一次快照建立前,寫入了假如20個key,redis服務器異常斷開,那麼這段時間內的 20個key 數據將會所有丟失,不能保證數據完整性。
    2. 當快照文件比較大之後,每次建立新的快照,會致使對客戶端的服務暫停數毫秒,甚至數秒。

2.AOF

  • 什麼是AOF

    aof是將redis的寫操做以日誌記錄的形式追加到 aof文件中保存,每次有寫操做,都會向該文件追加,所以,redis重啓或恢復數據都是將aof中的記錄的命令從新所有執行一次達到恢復數據的目的

  • 如何開啓aof

    1. 配置 appendonly yes 來開啓
    2. 經過配置 appendsync 選項來 決定同步頻率, appendsync 對應有三個選項
      1. always:每一個redis寫命令都是記錄追加到aof文件,這樣會嚴重下降redis的速度
      2. everysec:每秒執行一次同步,顯式的將多個寫命令同步到硬盤
      3. no:讓操做系統來決定應該什麼時候進行同步
  • AOF的優處

    1. 通常配置每秒進行寫入同步,這樣能夠很好的數據的完整性,最多隻會丟失一秒的數據
    2. aof日誌文件以appendonly模式寫入,全部沒有任何磁盤尋址的開銷,能夠很快找到文件並寫入文件,並且文件不容易破損,且還能夠修復
    3. 當aof文件過大的時候,可能會出現後臺重寫操做,也不會影響客戶端的使用,在建立新的日誌文件時候,會將老文件壓縮,提取恢復數據的最小日誌出來。
  • AOF的劣勢

    1. 針對快照來講,aof文件相對要大得多
    2. 每秒寫入文件,性能相對快照而言相對會下降,但仍是很快
    3. 之前AOF出現bug,就是經過aof日誌恢復數據,沒有恢復的一摸同樣,因此相對快照這種穩定的恢復數據方式來講更加脆弱一點。

3.如何抉擇

  1. 不要只用快照,由於這樣可能會致使丟失不少數據
  2. 不要只用aof,由於使用aof作冷備沒有使用快照作冷備恢復數據來的快,而且沒有快照穩定
  3. 所以,最好二者都使用。使用aof保證數據不丟失,做爲恢復數據的第一選擇。用快照用不一樣程度的冷備,在aof文件丟失或者損壞的狀況下還可使用快照進行恢復。
相關文章
相關標籤/搜索