溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis持久化中的RDB使用方法

發(fā)布時間:2021-09-14 15:27:33 來源:億速云 閱讀:135 作者:柒染 欄目:編程語言

Redis持久化中的RDB使用方法,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Redis持久化概述

Redis持久化分成三種方式:RDB(Redis DataBase)、AOF(Append Only File)和AOF+RDB混合持久化

關(guān)于Redis持久化,有這么一些說法:

1:RDB是在不同的時間點(diǎn),將Redis某一時刻的數(shù)據(jù)生成快照并存儲到磁盤上

2:AOF是只允許追加不允許改寫的文件,是將Redis執(zhí)行過的所有寫指令記錄下來,在下次Redis重新啟動時,只要把這些寫指令從前到后再重復(fù)執(zhí)行一遍,就可以實現(xiàn)數(shù)據(jù)恢復(fù)了

3:混合方式是先使用RDB進(jìn)行快照存儲,然后使用AOF持久化記錄所有的寫操作

4:RDB和AOF兩種方式可以同時使用,在這種情況下,如果Redis重啟的話,則會優(yōu)先采用AOF方式來進(jìn)行數(shù)據(jù)恢復(fù),這是因為AOF方式的數(shù)據(jù)恢復(fù)完整度更高

5:可以關(guān)閉RDB和AOF,這樣的話,Redis將變成一個純內(nèi)存數(shù)據(jù)庫,就像Memcache一樣

6:通過配置redis.conf中的appendonly為yes就可以打開AOF功能

7:通過 aof-use-rdb-preamble 配置項可以打開混合方式

RDB方式概述

RDB方式,Redis會單獨(dú)創(chuàng)建(fork)一個子進(jìn)程來進(jìn)行持久化,會先將數(shù)據(jù)寫入到一個臨時文件中,待持久化過程都結(jié)束了,再用這個臨時文件替換上次持久化好的文件。整個過程中,主進(jìn)程是不進(jìn)行任何IO操作的,這就確保了極高的性能

如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對于數(shù)據(jù)恢復(fù)的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。

RDB的配置

1:save * :保存快照的頻率,第一個表示多長時間,單位是秒,第二個*表示至少執(zhí)行寫操作的次數(shù);在一定時間內(nèi)至少執(zhí)行一定數(shù)量的寫操作時,就自動保存快照;可設(shè)置多個條件。

(1)如果想禁用RDB持久化的策略,只要不設(shè)置任何save指令,或者給save傳入一個空字符串參數(shù)也可以

(2)如果用戶開啟了RDB快照功能,那么在Redis持久化數(shù)據(jù)到磁盤時如果出現(xiàn)失敗,默認(rèn)情況下,Redis會停止接受所有的寫請求。這樣做的好處在于可以讓用戶很明確的知道內(nèi)存中的數(shù)據(jù)和磁盤上的數(shù)據(jù)已經(jīng)存在不一致了。如果下一次RDB持久化成功,redis會自動恢復(fù)接受寫請求。

2:dbfilename:數(shù)據(jù)快照文件名(只是文件名,不包括目錄),默認(rèn)dump.rdb

3:dir:數(shù)據(jù)快照的保存目錄(這個是目錄),默認(rèn)是當(dāng)前路徑

4:stop-writes-on-bgsave-error:如果配置成no,表示你不在乎數(shù)據(jù)不一致或者有其他的手段發(fā)現(xiàn)和控制這種不一致,那么在快照寫入失敗時,也能確保redis繼續(xù)接受新的寫請求

5:rdbcompression:對于存儲到磁盤中的快照,可以設(shè)置是否進(jìn)行壓縮存儲。如果是的話,redis會采用LZF算法進(jìn)行壓縮。如果你不想消耗CPU來進(jìn)行壓縮的話,可以設(shè)置為關(guān)閉此功能

6:rdbchecksum:在存儲快照后,還可以讓redis使用CRC64算法來進(jìn)行數(shù)據(jù)校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關(guān)閉此功能

7:rdb-del-sync-files:在沒有持久性的情況下刪除復(fù)制中使用的RDB文件啟用。默認(rèn)情況下,此選項是禁用的。

RDB優(yōu)點(diǎn)

	適合冷備份、高性能、恢復(fù)數(shù)據(jù)快

RDB的問題

1:fork一個進(jìn)程時,內(nèi)存的數(shù)據(jù)也被復(fù)制了,即內(nèi)存會是原來的兩倍

2:每次快照持久化都是將內(nèi)存數(shù)據(jù)完整寫入到磁盤一次,并不是增量的只同步臟數(shù)據(jù)。如果數(shù)據(jù)量大的話,而且寫操作比較多,必然會引起大量的磁盤io操作,可能會嚴(yán)重影響性能。

3:由于快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改。

觸發(fā)快照的情況

1:根據(jù)配置規(guī)則進(jìn)行自動快照
2:用戶執(zhí)行save或bgsave命令
3:執(zhí)行flushall命令
4:執(zhí)行復(fù)制replication時

save命令

執(zhí)行Save命令時,Redis會阻塞所有客戶端的請求,然后同步進(jìn)行快照操作。

bgsave命令

執(zhí)行bgsave命令時,Redis會在后臺異步進(jìn)行快照操作,快照同時還可以響應(yīng)客戶端請求。可以通過lastsave命令獲取最后一次成功執(zhí)行快照的時間。

flushall命令

這個命令會導(dǎo)致Redis清除內(nèi)存中的所有數(shù)據(jù),如果定義了自動快照的條件,那么無論是否滿足條件,都會進(jìn)行一次快照操作;如果沒有定義自動快照的條件,那么不會進(jìn)行快照

關(guān)于Redis持久化中的RDB使用方法問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI