如何使用redis實(shí)現(xiàn)持久化?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

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