首頁 >資料庫 >Redis >redis資料持久化之RDB

redis資料持久化之RDB

齐天大圣
齐天大圣原創
2020-05-22 08:12:431623瀏覽

和Memcache不同的是,Redis能讓資料持久化到硬碟中。 Redis目前提供三種持久化方式,RDB、AOF、RDB-AOF混合持久化。資料的安全及備份是維運工作中的重點,以下來看看這RDB持久化的介紹及應用場景。

Redis預設使用的持久化方式是RDB,RDB檔案佔用空間很小,所以產生檔案速度及載入都很快。

產生RDB檔案

產生RDB檔案分為手動方式以及自動方式

先看手動方式,有兩個指令可以觸發產生RDB檔。 save及bgsave,他們的差別在於save操作會阻塞redis,直到RDB檔案產生結束。而bgsave,則不會阻塞redis,它會fork出一個子程序,在子程序中完成rdb檔的產生。

自動方式則又有幾種情況,分別如下:

  • 目前鍵的修改操作達到redis中Rdb的設定要求

  • #主從節點進行全量複製的時候

  • 重啟或關閉redis的時候(Redis持久化方式為RDB)

這裡,我們將重點放在下rdb的相關配置。

rdb檔案儲存的目錄是有dir設定項決定的

# rdb文件保存目录
dir "/usr/local/redis/var"

而檔案名稱則是由dbfilename決定

dbfilename "dump.rdb"

觸發機制則有save項目決定

save 900 1
save 300 10
save 60 10000

上面的配置的意義是,當900秒內有1次修改操作就觸發、當300秒內用10次修改操作就觸發,當60秒內有10000次修改操作就觸發。

另外rdbcompression設定項決定是否壓縮rdb文件,預設為yes,表示壓縮,這也是建議的方式。

RDB檔案產生流程

redis資料持久化之RDB

#因為save幾乎已經被遺棄,redis自動觸發都是採用bgsave操作,所以這裡只介紹bgsave的流程。

  1. 當執行bgsave時候,如果目前已有子程序的話,那麼redis就會直接退出,不執行下面的操作。沒有則往下執行。

  2. redis主程序會fork出一個子程序。 fork的時候會阻塞redis,但時間非常短。

  3. fork成功後,redis主流程繼續做自己該做的事。

  4. 子程序產生新的RDB文件,並取代舊的rdb檔。

  5. 當取代作業完成後,子行程會通知父行程,父行程就會儲存此操作的相關資訊。

應用程式場景

#RDB檔案體積小,產生及載入快,但rdb持久化方式無法做到即時持久化,異常情況下容易導致資料遺失。另外,不同版本的rdb檔案可能有不相容的情況。

透過上面的介紹,可以知道,RDB檔案非常適合做災難備份,例如每天凌晨產生RDB檔案。另外,如果redis裡存放的資料不是太重要,例如使用redis做緩存,丟失部分資料沒有影響的話,使用RDB通常是更佳的方式。

再介紹一個常見的問題的解決方法,redis資料存放的分割區快要寫滿時,如何在不停止redis下將資料寫到另一個分割區。我們可以使用config set dir '新分區目錄' 修改rdb檔案存放的目錄。然後執行bgsave產生新的RDB檔案到新的目錄中。

以上是redis資料持久化之RDB的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn