和Memcache不同的是,redis能夠讓數(shù)據(jù)持久化到硬盤中。Redis目前提供三種持久化方式,RDB、AOF、RDB-AOF混合持久化。數(shù)據(jù)的安全及備份是運維工作中的重點,下面來看看這RDB持久化的介紹及應(yīng)用場景。
在合浦等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,合浦網(wǎng)站建設(shè)費用合理。
Redis默認使用的持久化方式是RDB,RDB文件占用空間很小,所以生成文件速度及加載都很快。
生成RDB文件
生成RDB文件分為手動方式以及自動方式。
首先看手動方式,有兩個命令可以觸發(fā)生成RDB文件。save及bgsave,他們的區(qū)別是save操作會阻塞redis,直到RDB文件生成結(jié)束。而bgsave,則不會阻塞redis,它會fork出一個子進程,在子進程中完成rdb文件的生成。
自動方式則又有幾種情況,分別如下:
當(dāng)前鍵的修改操作達到redis中Rdb的配置要求
主從節(jié)點進行全量復(fù)制的時候
重啟或關(guān)閉redis的時候(Redis持久化方式為RDB)
這里,我們重點來看下rdb的相關(guān)配置。
rdb文件保存的目錄是有dir配置項決定的
# rdb文件保存目錄 dir "/usr/local/redis/var"
而文件名則是由dbfilename決定
dbfilename "dump.rdb"
觸發(fā)機制則有save項決定
save 900 1 save 300 10 save 60 10000
上面的配置的含義是,當(dāng)900秒內(nèi)有1次修改操作就觸發(fā)、當(dāng)300秒內(nèi)用10次修改操作就觸發(fā),當(dāng)60秒內(nèi)有10000次修改操作就觸發(fā)。
另外rdbcompression配置項就決定是否壓縮rdb文件,默認為yes,表示壓縮,這也是推薦的方式。
RDB文件生成流程
因為save幾乎已經(jīng)廢棄,redis自動觸發(fā)都是采用bgsave操作,所以這里只介紹bgsave的流程。
當(dāng)執(zhí)行bgsave時候,如果當(dāng)前已有子進程的話,那么redis就會直接退出,不執(zhí)行下面的操作。沒有則往下執(zhí)行。
redis主進程會fork出一個子進程。fork的時候會阻塞redis,但時間非常短。
fork成功后,redis主進程繼續(xù)做自己該做的事。
子進程生成新的RDB文件,并替換舊的rdb文件。
當(dāng)替換操作完成后,子進程會通知父進程,父進程就會保存此次操作的相關(guān)信息。
應(yīng)用場景
RDB文件體積小,生成及加載快,但是rdb持久化方式不能做到實時持久化,異常情況下容易導(dǎo)致數(shù)據(jù)丟失。另外,不同版本的rdb文件可能存在不兼容的情況。
通過上面的介紹,可以知道,RDB文件非常適合做容災(zāi)備份,比如每天凌晨生成RDB文件。另外,如果redis里存放的數(shù)據(jù)不是太重要,比如使用redis做緩存,丟失部分數(shù)據(jù)沒有影響的話,使用RDB通常是更佳的方式。
再介紹一個常見的問題的解決方法,redis數(shù)據(jù)存放的分區(qū)快要寫滿時,如何在不停止redis下將數(shù)據(jù)寫到另一個分區(qū)中。我們可以使用config set dir '新分區(qū)目錄' 修改rdb文件存放的目錄。然后執(zhí)行bgsave生成新的RDB文件到新的目錄中。
以上就是redis數(shù)據(jù)持久化之RDB的詳細內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!