如何使用redis實(shí)現(xiàn)持久化?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),營(yíng)銷(xiāo)型網(wǎng)站建設(shè)到技術(shù)研發(fā)擁有了開(kāi)發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽(tīng)企業(yè)需求,挖掘用戶(hù)對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)10年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開(kāi)發(fā)等專(zhuān)業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)鄭州服務(wù)器托管、成都APP應(yīng)用開(kāi)發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷(xiāo)。
RDB
RDB就是持久化的一種手段,把內(nèi)存中數(shù)據(jù)在某些條件下寫(xiě)到磁盤(pán)中去。那么在哪些條件下寫(xiě)入呢?不可能無(wú)腦寫(xiě)入,來(lái)一個(gè)寫(xiě)一個(gè),影響性能,也不能等老半天才寫(xiě)一個(gè),萬(wàn)一中間宕機(jī)了,數(shù)據(jù)全丟失,還不如用memcached。在redis的配置里有著這樣的一段配置:
save 900 1
save 300 10
save 60 10000
很關(guān)鍵的一段配置,這時(shí)RDB持久化的核心。意思是:
1.如果900秒時(shí),有1個(gè)key變化(插入或者更新),我就同步到磁盤(pán)一下
2.如果300秒時(shí),有10個(gè)key變化(插入或者更新),我就同步到磁盤(pán)一下
3.如果60秒時(shí),有10000個(gè)key變化(插入或者更新),我就同步到磁盤(pán)一下
這些時(shí)間點(diǎn)和變化的數(shù)量是怎么知道的,這時(shí)有另外兩個(gè)極為關(guān)鍵的東西,一個(gè)叫dirty計(jì)數(shù)器,一個(gè)叫l(wèi)astsave(上次save的時(shí)間),dirty計(jì)數(shù)器專(zhuān)門(mén)記錄從上次save后變化key的數(shù)量,lastsave記錄執(zhí)行save的時(shí)間,舉個(gè)例子剛開(kāi)始時(shí)間是time1,dirty是0,這時(shí)有20個(gè)key發(fā)生了變化,dirty是20,然后現(xiàn)在的時(shí)間是time2,time2-time1 >= 300,滿(mǎn)足第二個(gè)條件,這時(shí)內(nèi)存中的數(shù)據(jù)會(huì)save一下,同時(shí)dirty清為0,然后再等待條件觸發(fā)。
如果我60秒內(nèi)有10萬(wàn)個(gè)key,那么問(wèn)題來(lái)了,一下大量磁盤(pán)io來(lái)臨,這時(shí)redis主進(jìn)程就會(huì)阻塞,期間的所有的命令都不執(zhí)行,這哪能行,于是就來(lái)了一個(gè)叫bgsave的,它是redis主進(jìn)程fork出來(lái)的一個(gè)子進(jìn)程,專(zhuān)門(mén)執(zhí)行rdb的持久化工作的。
保存的文件格式是二進(jìn)制格式的,萬(wàn)一數(shù)據(jù)庫(kù)宕機(jī),恢復(fù)不需要人為干預(yù),redis會(huì)自動(dòng)讀取磁盤(pán)文件。
AOF
與RDB不同,AOF存儲(chǔ)的是你執(zhí)行的命令,當(dāng)aof功能打開(kāi)的時(shí)候,執(zhí)行的更新命令不會(huì)直接寫(xiě)到aof文件中去,而是先寫(xiě)到一個(gè)aof buf中,我們知道不能一直往buf中寫(xiě),buf也是內(nèi)存啊,那么何時(shí)才能同步到磁盤(pán)中去呢?redis中也有這樣一段配置
appendfsync always
appendfsync everysec
appendfsync no
意思是:
1.只要有更新的命令我就同步
2.如果上次同步時(shí)間距離現(xiàn)在超過(guò)一秒就同步
3.不同步,等待操作系統(tǒng)自己判斷(什么時(shí)候我有空我才同步)
分析下,第一種io頻繁,io壓力大,但丟失數(shù)據(jù)的概率最小,第二種io壓力不是很大,最多也就丟失1秒左右的數(shù)據(jù),第三中io壓力很小,丟失數(shù)據(jù)概率太大。綜合考慮,一般第二種。但還有個(gè)問(wèn)題,我執(zhí)行了100次INCR num,按道理num就是100,aof中也有100個(gè)同樣的命令,沒(méi)毛病,那么請(qǐng)問(wèn)執(zhí)行100次INCR num和SET num 100有什么區(qū)別,同樣的結(jié)果前者多了99倍的空間,很浪費(fèi)啊,于是就出現(xiàn)了AOF重寫(xiě),它是怎么做到的。很簡(jiǎn)單:首先從數(shù)據(jù)庫(kù)讀取現(xiàn)在的值,然后用一條記錄代替,這就是AOF重寫(xiě)的原理。重寫(xiě)很花時(shí)間,所以也是子進(jìn)程來(lái)處理。重寫(xiě)的過(guò)程中,如果有新的命令來(lái)臨怎么辦,老辦法,寫(xiě)buf緩沖,重寫(xiě)完成后,把buf中的命令追加到新的aof中,然后用新的aof替代老的aof,就實(shí)現(xiàn)了重寫(xiě)。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
當(dāng)前題目:如何使用redis實(shí)現(xiàn)持久化
地址分享:http://www.rwnh.cn/article28/igpscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、定制開(kāi)發(fā)、建站公司、網(wǎng)站內(nèi)鏈、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)