1. 程式人生 > >redis數據可持久化

redis數據可持久化

syn 配置 技術 html 建議 hot 優先 line end

1.快照(snapshats)

  1-1:配置文件

    save 900 1

    save 300 10

    save 60 10000

    dbfilename dump.rdb (存儲文件)

    含義:指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

  1-2:可以自己手動存儲

    save 命令執行一個同步保存操作,將當前 Redis 實例的所有數據快照(snapshot)以 RDB 文件的形式保存到硬盤。

    一般來說,在生產環境很少執行 SAVE 操作,因為它會阻塞所有客戶端,保存數據庫的任務通常由 BGSAVE 命令異步地執行。

    然而,如果負責保存數據的後臺子進程不幸出現問題時,SAVE 可以作為保存數據的最後手段來使用。

  原理

  • Redis forks.
  • 子進程開始將數據寫到臨時RDB文件中。
  • 當子進程完成寫RDB文件,用新文件替換老文件。
  • 這種方式可以使Redis使用copy-on-write技術。  

  特點

  快照易恢復,文件也小,但是如果遇到宕機等情況的時候快照的數據可能會不完整。此時可能需要啟用另一種持久化方式AOF

2.append only mode (aof)

  配置

    appendonly yes

    appendfsync everysec (可選參數:

       appendfsync always #always 表示每次有寫操作都進行同步,非常慢,非常安全。
       appendfsync everysec #everysec表示對寫操作進行累積,每秒同步一次
       官方的建議的everysec,安全,就是速度不夠快,如果是機器出現問題可能會丟失1秒的數據。

       也可以手動執行bgrewriteaof進行AOF備份: bgrewriteaof

    )

  AOF重寫

    AOF文件是可識別的純文本,它的內容就是一個個的Redis標準命令,
    AOF日誌也不是完全按客戶端的請求來生成日誌的,比如命令 INCRBYFLOAT 在記AOF日誌時就被記成一條SET記錄,

    因為浮點數操作可能在不同的系統上會不同,所以為了避免同一份日誌在不同的系統上生成不同的數據集,所以這裏只將操作後的結果通過SET來記錄。

    每一條寫命令都生成一條日誌,AOF文件會很大。

    AOF重寫是重新生成一份AOF文件,新的AOF文件中一條記錄的操作只會有一次

,而不像一份老文件那樣,可能記錄了對同一個值的多次操作。

    其生成過程和RDB類似,也是fork一個進程,直接遍歷數據,寫入新的AOF臨時文件。

    在寫入新文件的過程中,所有的寫操作日誌還是會寫到原來老的 AOF文件中,同時還會記錄在內存緩沖區中。

    當重完操作完成後,會將所有緩沖區中的日誌一次性寫入到臨時文件中。然後調用原子性的rename命令用新的 AOF文件取代老的AOF文件

  

    原理:

      AOF重寫並不需要對原有AOF文件進行任何的讀取,寫入,分析等操作,這個功能是通過讀取服務器當前的數據庫狀態來實現的。

  

    命令:

      BGREWRITEAOF, 我們應該經常調用這個命令來來重寫

當redis服務器掛掉時,重啟時將按照以下優先級恢復數據到內存:

  • 如果只配置AOF,重啟時加載AOF文件恢復數據;
  • 如果同時 配置了RBD和AOF,啟動是只加載AOF文件恢復數據;
  • 如果只配置RBD,啟動是講加載dump文件恢復數據。

恢復時需要註意,要是主庫掛了不能直接重啟主庫,否則會直接覆蓋掉從庫的AOF文件,一定要確保要恢復的文件都正確才能啟動,否則會沖掉原來的文件。

redis數據可持久化