1. 程式人生 > >redis 持久化 ——RDB

redis 持久化 ——RDB

文章目錄


RDB

redis database 的簡寫 ;

在指定時間間隔後,將記憶體中的資料集快照寫入資料庫 ;在恢復時候,直接讀取快照檔案,進行資料的恢復 ;

在進行 RDB 的時候,redis 的主執行緒是不會做 io 操作的,主執行緒會 fork 一個子執行緒來完成該操作;

子執行緒在操作的時候,會先將資料寫進臨時檔案中,等到記憶體中所有的資料都寫進臨時檔案中以後,才會進行檔案的替換,用該臨時檔案替換掉上一次的持久化檔案 ;

從子執行緒的工作方式,我們也可以看出,最後一次持久化操作以後的資料面臨著丟失的風險 ;


關於 fork

fork 作用是複製,複製當前執行緒的一個副本,副本是什麼概念,複製品的意思,也就是說,主執行緒的資料,都會被 copy 來,這樣就導致一個問題,每次進行 RDB 的時候,其實記憶體中是有兩份資料的,這個需要考慮到 ;


dump.rdb 檔案

RDB 方式儲存的檔案是 dump.rdb 檔案 ;

在配置檔案中進行配置,不再累贅,前一篇 redis 配置檔案 的部落格,已經講了


如何觸發 RDB 快照

  1. 使用 save 命令,會立刻對當前記憶體中的資料進行持久化 ,但是會阻塞,也就是不接受其他操作了;
  2. flushall 命令也會觸發持久化 ;
  3. 滿足配置條件中的觸發條件 ;
  4. bgsave 是非同步進行,進行持久化的時候,redis 還可以將繼續響應客戶端請求 ;
  5. 重新啟動 redis ,也會觸發,記進行載入持久化檔案 ;

可以通過 lastsave 獲取上一次 save 的時間 ;


如何恢復

將備份檔案放在 redis 的安裝目錄,然後啟動 redis 即可 ;


優勢

  1. 適合大規模檔案的備份,速度比較快 ;
  2. 對資料的完整性和一致性要求不高
  3. 在備份的時候,是子執行緒在操作,不需要 redis 的主執行緒進行 IO 操作,不會影響效能;

劣勢

  1. fork 對記憶體佔用 ;
  2. 最後一次持久化以後的資料存在丟失的風險 ;

停掉 RDB

在配置檔案中,配置 save ""即可 ;