溫馨提示×

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

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

Redis的持久化機(jī)制采用RDB還是AOF

發(fā)布時(shí)間:2021-11-26 09:46:05 來(lái)源:億速云 閱讀:211 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要講解了“Redis的持久化機(jī)制采用RDB還是AOF”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Redis的持久化機(jī)制采用RDB還是AOF”吧!

Redis的持久化機(jī)制采用RDB還是AOF

RDB

1. 什么是RDB

RDB:每隔一段時(shí)間,把內(nèi)存中的數(shù)據(jù)寫入磁盤的臨時(shí)文件,作為快照,恢復(fù)的時(shí)候把快照文件讀進(jìn)內(nèi)存。如果宕機(jī)重啟,那么內(nèi)存里的數(shù)據(jù)肯定會(huì)沒(méi)有的,那么再次啟動(dòng)redis后,則會(huì)恢復(fù)。

2. 備份與恢復(fù)

內(nèi)存?zhèn)浞?--> 磁盤臨時(shí)文件
臨時(shí)文件 --> 恢復(fù)到內(nèi)存

3. RDB優(yōu)劣勢(shì)

  • 優(yōu)勢(shì)

    • 每隔一段時(shí)間備份,全量備份

    • 災(zāi)備簡(jiǎn)單,可以遠(yuǎn)程傳輸

    • 子進(jìn)程備份的時(shí)候,主進(jìn)程不會(huì)有任何io操作(不會(huì)有寫入修改或刪除),保證備份數(shù)據(jù)的的完整性

    • 相對(duì)AOF來(lái)說(shuō),當(dāng)有更大文件的時(shí)候可以快速重啟恢復(fù)

  • 劣勢(shì)

    • 發(fā)生故障是,有可能會(huì)丟失最后一次的備份數(shù)據(jù)

    • 子進(jìn)程所占用的內(nèi)存比會(huì)和父進(jìn)程一模一樣,如會(huì)造成CPU負(fù)擔(dān)

    • 由于定時(shí)全量備份是重量級(jí)操作,所以對(duì)于實(shí)時(shí)備份,就無(wú)法處理了。

4. RDB的配置

  • 保存位置,可以在redis.conf自定義:
    /user/local/redis/working/dump.rdb

  • 保存機(jī)制:

save 900 1
save 300 10
save 60 10000
save 10 3
* 如果1個(gè)緩存更新,則15分鐘后備份
* 如果10個(gè)緩存更新,則5分鐘后備份
* 如果10000個(gè)緩存更新,則1分鐘后備份
  • stop-writes-on-bgsave-error

    • yes:如果save過(guò)程出錯(cuò),則停止寫操作

    • no:可能造成數(shù)據(jù)不一致

  • rdbcompression

    • yes:開啟rdb壓縮模式

    • no:關(guān)閉,會(huì)節(jié)約cpu損耗,但是文件會(huì)大,道理同nginx

  • rdbchecksum

    • yes:使用CRC64算法校驗(yàn)對(duì)rdb進(jìn)行數(shù)據(jù)校驗(yàn),有10%性能損耗

    • no:不校驗(yàn)

總結(jié)

RDB適合大量數(shù)據(jù)的恢復(fù),但是數(shù)據(jù)的完整性和一致性可能會(huì)不足。

AOF

AOF特點(diǎn)

  • 以日志的形式來(lái)記錄用戶請(qǐng)求的寫操作。讀操作不會(huì)記錄,因?yàn)閷懖僮鞑艜?huì)存存儲(chǔ)。

  • 文件以追加的形式而不是修改的形式。

  • redis的aof恢復(fù)其實(shí)就是把追加的文件從開始到結(jié)尾讀取執(zhí)行寫操作。

優(yōu)勢(shì)

  • AOF更加耐用,可以以秒級(jí)別為單位備份,如果發(fā)生問(wèn)題,也只會(huì)丟失最后一秒的數(shù)據(jù),大大增加了可靠性和數(shù)據(jù)完整性。所以AOF可以每秒備份一次,使用fsync操作。

  • 以log日志形式追加,如果磁盤滿了,會(huì)執(zhí)行 redis-check-aof 工具

  • 當(dāng)數(shù)據(jù)太大的時(shí)候,redis可以在后臺(tái)自動(dòng)重寫aof。當(dāng)redis繼續(xù)把日志追加到老的文件中去時(shí),重寫也是非常安全的,不會(huì)影響客戶端的讀寫操作。

  • AOF 日志包含的所有寫操作,會(huì)更加便于redis的解析恢復(fù)。

劣勢(shì)

  • 相同的數(shù)據(jù),同一份數(shù)據(jù),AOF比RDB大

  • 針對(duì)不同的同步機(jī)制,AOF會(huì)比RDB慢,因?yàn)锳OF每秒都會(huì)備份做寫操作,這樣相對(duì)與RDB來(lái)說(shuō)就略低。 每秒備份fsync沒(méi)毛病,但是如果客戶端的每次寫入就做一次備份fsync的話,那么redis的性能就會(huì)下降。

  • AOF發(fā)生過(guò)bug,就是數(shù)據(jù)恢復(fù)的時(shí)候數(shù)據(jù)不完整,這樣顯得AOF會(huì)比較脆弱,容易出現(xiàn)bug,因?yàn)锳OF沒(méi)有RDB那么簡(jiǎn)單,但是呢為了防止bug的產(chǎn)生,AOF就不會(huì)根據(jù)舊的指令去重構(gòu),而是根據(jù)當(dāng)時(shí)緩存中存在的數(shù)據(jù)指令去做重構(gòu),這樣就更加健壯和可靠了。

AOF的配置

`# AOF 默認(rèn)關(guān)閉,yes可以開啟
appendonly no

# AOF 的文件名
appendfilename "appendonly.aof"

# no:不同步
# everysec:每秒備份,推薦使用
# always:每次操作都會(huì)備份,安全并且數(shù)據(jù)完整,但是慢性能差
appendfsync everysec

# 重寫的時(shí)候是否要同步,no可以保證數(shù)據(jù)安全
no-appendfsync-on-rewrite no

# 重寫機(jī)制:避免文件越來(lái)越大,自動(dòng)優(yōu)化壓縮指令,會(huì)fork一個(gè)新的進(jìn)程去完成重寫動(dòng)作,新進(jìn)程里的內(nèi)存數(shù)據(jù)會(huì)被重寫,此時(shí)舊的aof文件不會(huì)被讀取使用,類似rdb
# 當(dāng)前AOF文件的大小是上次AOF大小的100% 并且文件體積達(dá)到64m,滿足兩者則觸發(fā)重寫
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb`

到底采用RDB還是AOF呢?

  • 如果你能接受一段時(shí)間的緩存丟失,那么可以使用RDB

  • 如果你對(duì)實(shí)時(shí)性的數(shù)據(jù)比較care,那么就用AOF

  • 使用RDB和AOF結(jié)合一起做持久化,RDB做冷備,可以在不同時(shí)期對(duì)不同版本做恢復(fù),AOF做熱備,保證數(shù)據(jù)僅僅只有1秒的損失。當(dāng)AOF破損不可用了,那么再用RDB恢復(fù),這樣就做到了兩者的相互結(jié)合,也就是說(shuō)Redis恢復(fù)會(huì)先加載AOF,如果AOF有問(wèn)題會(huì)再加載RDB,這樣就達(dá)到冷熱備份的目的了。

感謝各位的閱讀,以上就是“Redis的持久化機(jī)制采用RDB還是AOF”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Redis的持久化機(jī)制采用RDB還是AOF這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI