Redis 七 持久化

ellen艾琳發表於2020-11-14

1、 Redis 是一個支援持久化的記憶體資料庫,將記憶體中的資料儲存到磁碟中,重啟的時候可以再次載入進行使用。
    兩種持久化方式:1)RDB快照(預設) 2)AOF日誌 
2、 RDB快照 (Redis DataBase) 
    1)在指定的時間間隔內,將記憶體中的資料集快照寫入磁碟
    2)預設方式是將 Reids 在記憶體中的資料集定時 dump 到磁碟上,檔案是 dump.rdb 
    3)實際操作過程是 fork 一個子程式,先將資料集寫入臨時檔案,寫入成功後替換之前的檔案,用二進位制壓縮儲存
    一句話概括:子程式現將記憶體中的資料集快照dump到臨時檔案,寫入成功後替換之前的檔案
3、 AOF日誌 (Append Only File)
    1)AOF 是以日誌的形式記錄伺服器所處理的每一個寫入、刪除操作,查詢操作不會記錄
    2)原理是將 Redis 的操作日誌以追加的方式寫入檔案。 Redis 伺服器啟動之初會讀取該檔案,重新構建資料庫,以保證啟動後資料的完整性
    3)以文字的方式記錄,開啟檔案可以看到詳細的操作記錄
    4)在redis的配置檔案中設定appendonly yes,此時rdb方式自動失效
    5)如果 AOF 檔案出現異常,Redis 在重啟的時候將會拒絕載入,從而保證資料的一致性。 AOF 檔案修復命令:redis-check-aof -fix
4、 RDB快照的優缺點:
    優點:1)RDB 是緊湊的二進位制檔案 2)適合備份,全量複製等場景 
    缺點:1)RDB 無法實現實時或者秒級持久化 2)新老版本無法相容 
5、 AOF日誌優缺點:
    優點:1)可以更好地保護資料不丟失 2)append-only 模式寫入效能比較高 3)適合做災難性誤刪除的緊急恢復
    缺點:1)對於同一份檔案,AOF 日誌要比 RDB 快照大
          2)AOF 開啟後會對寫的 QPS(Query Per Second,每秒查詢率) 有所影響,相對於 RDB 來說寫 QPS 要下降
          3)資料庫恢復比較慢,不合適做冷備    
6、 RDB 和 AOF 的區別:
    1)持久化方式不同:RDB是快照方式,二進位制檔案。AOF是日誌方式,文字檔案
    2)資料完整性:RDB 可能會引起一定程度的資料丟失,AOF 不會造成資料丟失。如果對資料的完整性要求不高 RDB 是最好的解決方案,反之選擇 AOF
    3)RDB 啟動效率更高,RDB 恢復資料遠快於 AOF
    4)AOF 佔用的空間比 RDB 大
    5)AOF 的同步速度比 RDB 慢
7、 Redis 持久化命令:
    1)SAVE 直接呼叫 Redis 持久化函式 rdbSave ,阻塞 Redis 主程式,直到儲存完成為止,在主程式阻塞期間,伺服器不能處理客戶端的任何請求
        如:save 900 1        900秒內有超過1個key被修改就快照儲存
    2)BGSAVE 會建立一個子程式負責呼叫 rdbSave 函式,並在儲存完成之後向主程式傳送完成訊號,Redis 伺服器在 BGSAVE  執行期間仍然可以繼續處理客戶端的請求

相關文章