redis 持久化 ——RDB
阿新 • • 發佈:2018-12-12
文章目錄
RDB
redis database
的簡寫 ;
在指定時間間隔後,將記憶體中的資料集快照寫入資料庫 ;在恢復時候,直接讀取快照檔案,進行資料的恢復 ;
在進行 RDB
的時候,redis
的主執行緒是不會做 io
操作的,主執行緒會 fork
一個子執行緒來完成該操作;
子執行緒在操作的時候,會先將資料寫進臨時檔案中,等到記憶體中所有的資料都寫進臨時檔案中以後,才會進行檔案的替換,用該臨時檔案替換掉上一次的持久化檔案 ;
從子執行緒的工作方式,我們也可以看出,最後一次持久化操作以後的資料面臨著丟失的風險 ;
關於 fork
fork
作用是複製,複製當前執行緒的一個副本,副本是什麼概念,複製品的意思,也就是說,主執行緒的資料,都會被 copy
來,這樣就導致一個問題,每次進行 RDB
的時候,其實記憶體中是有兩份資料的,這個需要考慮到 ;
dump.rdb 檔案
RDB
方式儲存的檔案是 dump.rdb
檔案 ;
在配置檔案中進行配置,不再累贅,前一篇
redis
配置檔案 的部落格,已經講了
如何觸發 RDB 快照
- 使用
save
命令,會立刻對當前記憶體中的資料進行持久化 ,但是會阻塞,也就是不接受其他操作了; flushall
命令也會觸發持久化 ;- 滿足配置條件中的觸發條件 ;
bgsave
是非同步進行,進行持久化的時候,redis
還可以將繼續響應客戶端請求 ;- 重新啟動
redis
,也會觸發,記進行載入持久化檔案 ;
可以通過 lastsave
獲取上一次 save
的時間 ;
如何恢復
將備份檔案放在 redis
的安裝目錄,然後啟動 redis
即可 ;
優勢
- 適合大規模檔案的備份,速度比較快 ;
- 對資料的完整性和一致性要求不高
- 在備份的時候,是子執行緒在操作,不需要
redis
的主執行緒進行IO
操作,不會影響效能;
劣勢
- fork 對記憶體佔用 ;
- 最後一次持久化以後的資料存在丟失的風險 ;
停掉 RDB
在配置檔案中,配置 save ""
即可 ;