亚洲三级在线播放_国产精品亚洲二区在线_精品国产电影久久久久_免费popnhub国产在线视频 - 美女被艹网站

金財(cái)晚報(bào)

金財(cái)晚報(bào)

當(dāng)前位置:首頁(yè)>民生消費(fèi)>

你管這叫RDB

來(lái)源:IT之家 作者:燕夢(mèng)蝶 發(fā)布時(shí)間:2022-10-20 11:05   閱讀量:5112   

我已經(jīng)運(yùn)行它好幾年了,內(nèi)存中存儲(chǔ)了很多鍵值對(duì)。

你管這叫RDB

如果我掛了,我記憶中的所有數(shù)據(jù)都會(huì)消失。

我得想辦法時(shí)不時(shí)把數(shù)據(jù)拷貝到硬盤里保存。

我稱這個(gè)偉大的計(jì)劃為持久的計(jì)劃。

停下你正在做的事情。

首先,我想到的最簡(jiǎn)單的辦法就是拒絕新的命令,開始把內(nèi)存中的數(shù)據(jù)復(fù)制到硬盤上。

等到復(fù)制完成,再開始接受新的命令。

這樣可以保證我復(fù)制的時(shí)候沒(méi)有新的命令修改內(nèi)存,保證了時(shí)效性。

簡(jiǎn)單來(lái)說(shuō),我保存了Redis在某個(gè)時(shí)刻的內(nèi)存狀態(tài)。

但是這樣每次堅(jiān)持下來(lái)都會(huì)屏蔽客戶端命令,肯定會(huì)被罵。

不要停止你正在做的事情。

那就簡(jiǎn)單了,然后我不會(huì)停止我正在做的事情,我會(huì)接受命令并使之永久化,如下。

這大大提高了效率,并且持久性不再阻止客戶端執(zhí)行命令。

但是,你有沒(méi)有注意到,在內(nèi)存中,某個(gè)時(shí)刻的數(shù)據(jù)只有三種情況:

Flash 18低并發(fā)編程

兄弟18低并發(fā)編程

弟18秋三連

而此時(shí)硬盤中的持久數(shù)據(jù)是:

山科十八丘三連

它不能代表任何時(shí)刻的內(nèi)存數(shù)據(jù)。

那么這樣的快照就失去了意義,即沒(méi)有時(shí)效性的保證。

顯然,這也不行。

先復(fù)制一份內(nèi)存

但是我能做什么呢。

停下手頭的工作可以保證時(shí)效性,但是卻擋住了客戶端。

不要停下手頭的工作,雖然不堵客戶端,但不能保證時(shí)效性。

真的很大。

抓了一會(huì)頭皮,冷靜下來(lái)開始分析。

時(shí)機(jī)一定要保證,否則快照就沒(méi)有意義了,只能盡量縮短阻塞客戶端的時(shí)間。

在阻塞客戶端時(shí)間之前,它是在持久化中消耗的,也就是將內(nèi)存復(fù)制到硬盤的過(guò)程。

優(yōu)化,先從內(nèi)存拷貝一份到另一個(gè)內(nèi)存空間,然后持久化這個(gè)新的內(nèi)存空間。

這樣,持久化過(guò)程不會(huì)延遲客戶端命令,也不會(huì)受到客戶端命令的影響,從而保證了及時(shí)性。

而阻塞客戶端的時(shí)間只是從內(nèi)存復(fù)制一份數(shù)據(jù)到內(nèi)存的時(shí)間,相對(duì)于整個(gè)持久化過(guò)程可以忽略不計(jì)。

完美!

有了這個(gè)完美的計(jì)劃,我去找我?guī)煾秆Α?/p>

寫副本

我:師傅,我做了一個(gè)持久的計(jì)劃!

主持人:嗯,讓我想想...嘖嘖,復(fù)制內(nèi)存是個(gè)好主意,不過(guò)有點(diǎn)生疏了你對(duì)操作系統(tǒng)了解不夠

我:啊,為什么。

主持人:想想吧您現(xiàn)在的目的是隔離持久化和處理客戶端命令這兩個(gè)過(guò)程中使用的內(nèi)存空間,對(duì)嗎

我:嗯嗯,是的。

主持人:是的,其實(shí)你只需要為持久化創(chuàng)建一個(gè)新的流程不同進(jìn)程之間的內(nèi)存是隔離的,即創(chuàng)建一個(gè)新進(jìn)程會(huì)將原進(jìn)程的內(nèi)存空間完全復(fù)制到一個(gè)新進(jìn)程中

我:啊,和自己復(fù)制一段記憶不一樣嗎花的時(shí)間差不多

業(yè)主:我的圖只是給用戶一個(gè)這樣的印象事實(shí)上,linux采用了寫時(shí)復(fù)制技術(shù)當(dāng)fork離開它的子進(jìn)程時(shí),并不立即復(fù)制內(nèi)存,只是復(fù)制一個(gè)映射關(guān)系,使它們臨時(shí)指向同一個(gè)內(nèi)存空間

Master:當(dāng)父子進(jìn)程寫入這個(gè)內(nèi)存空間時(shí),它實(shí)際上會(huì)復(fù)制內(nèi)存,而且是基于頁(yè)的。

我:我明白了,就是說(shuō)我可以利用操作系統(tǒng)的進(jìn)程寫的時(shí)候復(fù)制內(nèi)存的原理,而不是自己復(fù)制所有的內(nèi)存因?yàn)橛辛顺志没倪^(guò)程,我覺(jué)得對(duì)內(nèi)存的寫入不會(huì)太多,大部分值都是常量,所以提高了效率

主持人:是的。

我:太好了!

我迅速修改了方案當(dāng)它需要持久化時(shí),我將派生一個(gè)子流程來(lái)實(shí)現(xiàn)這一點(diǎn)操作系統(tǒng)進(jìn)程內(nèi)存隔離的特性為我保證了時(shí)效性,寫時(shí)復(fù)制原理為我保證了效率,也就是減少了客戶端的阻塞時(shí)間偽代碼是這樣的

voidrdbSaveBackground///子進(jìn)程句柄if0)//主方法rdbSave

完美!

我們還沒(méi)有決定結(jié)構(gòu)。

剛剛訪問(wèn)了持久化的進(jìn)程,還沒(méi)有設(shè)置寫入磁盤的數(shù)據(jù)格式。

那就訂一個(gè)。

如果我的Redis內(nèi)存中只有一條數(shù)據(jù),則通過(guò)以下命令寫入:

設(shè)置地兵發(fā)牛逼

落在磁盤上的持久性rdb文件將如下所示。

但我不在乎持續(xù)時(shí)間長(zhǎng)不長(zhǎng)。

什么時(shí)候做持久化,我給主人留了個(gè)配置。

保存m n

意味著當(dāng)m秒內(nèi)對(duì)數(shù)據(jù)集有n次修改時(shí),會(huì)自動(dòng)觸發(fā)一次持久化。

所有者也可以配置多個(gè)這樣的配置項(xiàng)目。

我好心地給主人分配了一個(gè)默認(rèn)配置項(xiàng),并寫了一條評(píng)論。

#保存?zhèn)?

# Intheexamplebelowthebehaviourwillbetosave:

# after 900 secifatleast 1 key changed

# after 300 secifatleast 10keyschanged

# 60秒后指定至少10000個(gè)密鑰已更改

保存9001

保存30010

儲(chǔ)蓄6010000

我覺(jué)得以我碩士的英語(yǔ)水平是看得懂的。

好了,這次真的完成了!

這個(gè)愚蠢的東西,我會(huì)給它一個(gè)名字,它叫做RDB。

沒(méi)什么特別的,其實(shí)就是以我的名字開頭,Redis DB。

附言

rdb持久化過(guò)程也可以手動(dòng)觸發(fā),即直接輸入bgsave,與自動(dòng)觸發(fā)完全一樣。

在redis的源代碼中,它被稱為bgsaveCommand方法。

整個(gè)源代碼非常簡(jiǎn)單易讀,但是有很多雜念。

鄭重聲明:此文內(nèi)容為本網(wǎng)站轉(zhuǎn)載企業(yè)宣傳資訊,目的在于傳播更多信息,與本站立場(chǎng)無(wú)關(guān)。僅供讀者參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。

mangren

財(cái)經(jīng)視界

財(cái)經(jīng)圖文

熱門推薦

金財(cái)晚報(bào)僅作為用戶獲取信息之目的,并不構(gòu)成投資建議。市場(chǎng)有風(fēng)險(xiǎn) 投資需謹(jǐn)慎。

網(wǎng)站地圖

Copyright 2018- 金財(cái)晚報(bào) All Rights Reserved 聯(lián)系我們: 備案號(hào):蜀ICP備13010463號(hào)