真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

淺談redis內(nèi)存數(shù)據(jù)的持久化方式-創(chuàng)新互聯(lián)

一、概述

成都創(chuàng)新互聯(lián)公司科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供成都服務(wù)器托管高防物理服務(wù)器租用,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。

Redis的強(qiáng)大性能很大程度上都是因?yàn)樗袛?shù)據(jù)都是存儲(chǔ)在內(nèi)存中的,然而當(dāng)Redis重啟后,所有存儲(chǔ)在內(nèi)存中的數(shù)據(jù)將會(huì)丟失,在很多情況下是無法容忍這樣的事情的。所以,我們需要將內(nèi)存中的數(shù)據(jù)持久化!典型的需要持久化數(shù)據(jù)的場景如下:

  1. 將Redis作為數(shù)據(jù)庫使用;
  2. 將Redis作為緩存服務(wù)器使用,但是緩存miss后會(huì)對(duì)性能造成很大影響,所有緩存同時(shí)失效時(shí)會(huì)造成服務(wù)雪崩,無法響應(yīng)。

本文介紹Redis所支持的兩種數(shù)據(jù)持久化方式。

二、Redis數(shù)據(jù)持久化

Redis支持兩種數(shù)據(jù)持久化方式:RDB方式和AOF方式。前者會(huì)根據(jù)配置的規(guī)則定時(shí)將內(nèi)存中的數(shù)據(jù)持久化到硬盤上,后者則是在每次執(zhí)行寫命令之后將命令記錄下來。兩種持久化方式可以單獨(dú)使用,但是通常會(huì)將兩者結(jié)合使用。

1、RDB方式

RDB方式的持久化是通過快照的方式完成的。當(dāng)符合某種規(guī)則時(shí),會(huì)將內(nèi)存中的數(shù)據(jù)全量生成一份副本存儲(chǔ)到硬盤上,這個(gè)過程稱作”快照”,Redis會(huì)在以下幾種情況下對(duì)數(shù)據(jù)進(jìn)行快照:

  1. 根據(jù)配置規(guī)則進(jìn)行自動(dòng)快照;
  2. 用戶執(zhí)行SAVE, BGSAVE命令;
  3. 執(zhí)行FLUSHALL命令;
  4. 執(zhí)行復(fù)制(replication)時(shí)。

執(zhí)行快照的場景

(1)根據(jù)配置自動(dòng)快照

Redis允許用戶自定義快照條件,當(dāng)滿足條件時(shí)自動(dòng)執(zhí)行快照。缺省情況下,Redis把數(shù)據(jù)快照存放在磁盤上的二進(jìn)制文件中,文件名為dump.rdb,此外,我們也可以通過配置文件來修改Redis服務(wù)器dump快照的頻率,在打開redis.windows.conf文件之后,我們搜索save,可以看到下面的配置信息:

淺談redis內(nèi)存數(shù)據(jù)的持久化方式

注意最后三行,分別表示:

在900秒(15分鐘)之后,如果至少有1個(gè)key發(fā)生變化,則dump內(nèi)存快照;

在300秒(5分鐘)之后,如果至少有10個(gè)key發(fā)生變化,則dump內(nèi)存快照;

在60秒(1分鐘)之后,如果至少有10000個(gè)key發(fā)生變化,則dump內(nèi)存快照。

每個(gè)快照條件獨(dú)占一行,他們之間是或(||)關(guān)系,只要滿足任何一個(gè)就進(jìn)行快照。上面配置save后的第一個(gè)參數(shù)T是時(shí)間,單位是秒,第二個(gè)參數(shù)M是更改的鍵的個(gè)數(shù),含義是:當(dāng)時(shí)間T內(nèi)被更改的鍵的個(gè)數(shù)大于M時(shí),自動(dòng)進(jìn)行快照。比如save 900 1的含義是15分鐘內(nèi)(900s)被更改的鍵的個(gè)數(shù)大于1時(shí),自動(dòng)進(jìn)行快照操作。

(2)執(zhí)行SAVE或BGSAVE命令

除了讓Redis自動(dòng)進(jìn)行快照外,當(dāng)我們需要重啟,遷移,備份Redis時(shí),我們也可以手動(dòng)執(zhí)行SAVE或BGSAVE命令主動(dòng)進(jìn)行快照操作。

SAVE命令:當(dāng)執(zhí)行SAVE命令時(shí),Redis同步進(jìn)行快照操作,期間會(huì)阻塞所有來自客戶端的請(qǐng)求,所以放數(shù)據(jù)庫數(shù)據(jù)較多時(shí),應(yīng)該避免使用該命令;

BGSAVE命令:從命令名字就能看出來,這個(gè)命令與SAVE命令的區(qū)別就在于該命令的快照操作是在后臺(tái)異步進(jìn)行的,進(jìn)行快照操作的同時(shí)還能處理來自客戶端的請(qǐng)求。執(zhí)行BGSAVE命令后Redis會(huì)馬上返回OK表示開始進(jìn)行快照操作,如果想知道快照操作是否已經(jīng)完成,可以使用LASTSAVE命令返回最近一次成功執(zhí)行快照的時(shí)間,返回結(jié)果是一個(gè)Unix時(shí)間戳。

(3)執(zhí)行FLUSHALL命令

當(dāng)執(zhí)行FLUSHALL命令時(shí),Redis會(huì)清除數(shù)據(jù)庫中的所有數(shù)據(jù)。需要注意的是:不論清空數(shù)據(jù)庫的過程是否觸發(fā)了自動(dòng)快照的條件,只要自動(dòng)快照條件不為空,Redis就會(huì)執(zhí)行一次快照操作,當(dāng)沒有定義自動(dòng)快照條件時(shí),執(zhí)行FLUSHALL命令不會(huì)進(jìn)行快照操作。

(4)執(zhí)行復(fù)制

當(dāng)設(shè)置了主從模式時(shí),Redis會(huì)在復(fù)制初始化時(shí)進(jìn)行自動(dòng)快照。

快照原理

Redis默認(rèn)會(huì)將快照文件存儲(chǔ)在Redis當(dāng)前進(jìn)程的工作目錄的dump.rdb文件中,可以通過配置文件中的dir和dbfilename兩個(gè)參數(shù)分別指定快照文件的存儲(chǔ)路徑和文件名,默認(rèn)的存儲(chǔ)路徑和文件名如下圖所示:

淺談redis內(nèi)存數(shù)據(jù)的持久化方式

快照?qǐng)?zhí)行的過程如下:

(1)Redis使用fork函數(shù)復(fù)制一份當(dāng)前進(jìn)程(父進(jìn)程)的副本(子進(jìn)程);
(2)父進(jìn)程繼續(xù)處理來自客戶端的請(qǐng)求,子進(jìn)程開始將內(nèi)存中的數(shù)據(jù)寫入硬盤中的臨時(shí)文件;
(3)當(dāng)子進(jìn)程寫完所有的數(shù)據(jù)后,用該臨時(shí)文件替換舊的RDB文件,至此,一次快照操作完成。

需要注意的是:

在執(zhí)行fork的時(shí)候操作系統(tǒng)(類Unix操作系統(tǒng))會(huì)使用寫時(shí)復(fù)制(copy-on-write)策略,即fork函數(shù)發(fā)生的一刻,父進(jìn)程和子進(jìn)程共享同一塊內(nèi)存數(shù)據(jù),當(dāng)父進(jìn)程需要修改其中的某片數(shù)據(jù)(如執(zhí)行寫命令)時(shí),操作系統(tǒng)會(huì)將該片數(shù)據(jù)復(fù)制一份以保證子進(jìn)程不受影響,所以RDB文件存儲(chǔ)的是執(zhí)行fork操作那一刻的內(nèi)存數(shù)據(jù)。所以RDB方式理論上是會(huì)存在丟數(shù)據(jù)的情況的(fork之后修改的的那些沒有寫進(jìn)RDB文件)。

通過上述的介紹可以知道,快照進(jìn)行時(shí)是不會(huì)修改RDB文件的,只有完成的時(shí)候才會(huì)用臨時(shí)文件替換老的RDB文件,所以就保證任何時(shí)候RDB文件的都是完整的。這使得我們可以通過定時(shí)備份RDB文件來實(shí)現(xiàn)Redis數(shù)據(jù)的備份。RDB文件是經(jīng)過壓縮處理的二進(jìn)制文件,所以占用的空間會(huì)小于內(nèi)存中數(shù)據(jù)的大小,更有利于傳輸。

Redis啟動(dòng)時(shí)會(huì)自動(dòng)讀取RDB快照文件,將數(shù)據(jù)從硬盤載入到內(nèi)存,根據(jù)數(shù)量的不同,這個(gè)過程持續(xù)的時(shí)間也不盡相同,通常來講,一個(gè)記錄1000萬個(gè)字符串類型鍵,大小為1GB的快照文件載入到內(nèi)存需要20-30秒的時(shí)間。

示例

下面演示RDB方式持久化,首先使用配置有如下快照規(guī)則:

save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文標(biāo)題:淺談redis內(nèi)存數(shù)據(jù)的持久化方式-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/ggdeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部