redis缓存架构-02-两种持久化机制(RDB和AOF)
1.兩種持久化機(jī)制的介紹
1.1 RDB
周期性的生成redis內(nèi)存數(shù)據(jù)的一份完整的快照
1)根據(jù)配置的檢查點(diǎn),生產(chǎn)rdb快照文件,fork一個(gè)子線程,將數(shù)據(jù)dump到rdb快照文件中,完成rdb文件后,替換之前的舊的快照文件
2)配置方式,在redis.conf文件中配置save 60 1000(每隔60,如果有超過(guò)1000個(gè)key發(fā)送了變化,就生產(chǎn)一份新的dump.rdb文件)
3)save可以配置多個(gè),就是多個(gè)檢查點(diǎn),只要符合就會(huì)進(jìn)行rdb備份
4)也可以手動(dòng)調(diào)用save或bgsave命令,同步或異步進(jìn)行rdb備份
1.2 AOF(需要在redis.conf文件中開(kāi)啟aof持久化?? appendonly yes)
對(duì)每一條寫(xiě)入命令作為日志,以append-only的模式寫(xiě)入到一個(gè)日志文件中,redis重啟時(shí)可以通過(guò)回放AOF日志文件重新構(gòu)建整個(gè)數(shù)據(jù)集。
1)寫(xiě)日志時(shí),不直接寫(xiě)入到磁盤(pán),而是先寫(xiě)入到os chache中,然后一定時(shí)間間隔(每一秒)調(diào)用一次操作系統(tǒng)的fsync操作,強(qiáng)制將os chache中的數(shù)據(jù),刷入到磁盤(pán)文件中。
fsync可配置的策略:
appendfsync always? #每寫(xiě)一條數(shù)據(jù),就執(zhí)行一次fsync,性能非常差
appendfsync everysec #每秒將os cache中的數(shù)據(jù)fsync到磁盤(pán),生產(chǎn)環(huán)境一般這樣配置
appendfsync no? #僅將數(shù)據(jù)寫(xiě)入到os cache,redis自己時(shí)不時(shí)的會(huì)調(diào)用fsync,不受控制
2)AOF是存放每條寫(xiě)命令的,所以AOF文件會(huì)不斷膨脹,當(dāng)大到一定的時(shí)候,就會(huì)觸發(fā)AOF 的rewrite操作
AOF rewrite操作:基于當(dāng)前redis內(nèi)存中的數(shù)據(jù),重新構(gòu)建一個(gè)更小的aof文件,然后將舊的aof文件刪除
rewrite可配置的策略:
auto-aof-rewrite-percentage 100 #當(dāng)rewrite增長(zhǎng)到指定的比例是,進(jìn)行aof rewrite
auto-aof-rewrite-min-size 64mb? #aof rewrite時(shí)的最小文件大小,只有超過(guò)指定的大小才會(huì)就行rewrite
3)如果同時(shí)開(kāi)啟了RDB和AOF兩種持久化機(jī)制,redis在重啟時(shí),會(huì)從aof文件中恢復(fù)數(shù)據(jù)
2.兩種持久化機(jī)制優(yōu)缺點(diǎn)的比較
2.1 RDB的有優(yōu)點(diǎn)
1)每一個(gè)dump.rdb文件代表了某一時(shí)刻redis中的全部數(shù)據(jù)的快照,非常適合做冷備份
2)直接基于rdb文件重啟和恢復(fù)redis數(shù)據(jù),速度更快(rdb是基于數(shù)據(jù)文件進(jìn)行恢復(fù),aof是基于寫(xiě)指令進(jìn)行回放)
3)rdb對(duì)redis對(duì)外提供讀寫(xiě)服務(wù)影響小,可以讓redis保持高性能(rdb每次寫(xiě)都是寫(xiě)入到內(nèi)存中,一定時(shí)間后,fork出一個(gè)子進(jìn)程進(jìn)行磁盤(pán)IO操作;aof需要每次寫(xiě)文件,雖然是先寫(xiě)os cache,但也有一定的開(kāi)銷)
2.2 RDB的缺點(diǎn)
1)如果發(fā)生故障,數(shù)據(jù)丟失的可能比較多(每隔一段時(shí)間才會(huì)進(jìn)行備份一次)
2)每次fork子進(jìn)程進(jìn)行io操作,如果數(shù)據(jù)文件特別大,會(huì)造成客戶端提供的服務(wù)暫停數(shù)毫秒
2.3 AOF的優(yōu)點(diǎn)
1)如果發(fā)生故障,數(shù)據(jù)丟失的比較少(每秒執(zhí)行一次fsync,只會(huì)丟失一秒的數(shù)據(jù))
2)aof日志文件以append-only模式寫(xiě)入,沒(méi)有磁盤(pán)尋址的開(kāi)銷,寫(xiě)入性高,即使有文件破損,也可以很容易修復(fù)(redis-check-aof --fix 要修改的aof文件)
3)aof通過(guò)可讀性的方式記錄,適合災(zāi)難性的誤刪除的緊急恢復(fù)(直接刪除aof中的該指令進(jìn)行重啟redis即可)
2.4 AOF的缺點(diǎn)
1)相同的數(shù)據(jù),aof文件要不rdb文件大
2)aof開(kāi)啟后,QPS會(huì)降低(每秒會(huì)進(jìn)行fsync操作)
3)數(shù)據(jù)恢復(fù)時(shí),需要基于指令回放操作,恢復(fù)速度慢,容易出現(xiàn)bug
3.兩種持久化機(jī)制的選擇
同時(shí)開(kāi)啟兩種持久化機(jī)制,用aof保證數(shù)據(jù)的不丟失,作為數(shù)據(jù)恢復(fù)的第一選擇;用rdb進(jìn)行冷備,在aof文件不可用是,作快速數(shù)據(jù)恢復(fù)。
4.開(kāi)啟兩種持久化機(jī)制時(shí)的數(shù)據(jù)恢復(fù)
4.1 如果redis進(jìn)程掛掉了,重啟redis進(jìn)程即可,基于aof進(jìn)行恢復(fù)
4.2 如果redis所在的機(jī)器掛掉了,重啟機(jī)器后,嘗試重啟redis進(jìn)程,基于aof進(jìn)行恢復(fù),如果aof文件有破損,使用redis-check-aof fix進(jìn)行修改
4.3 如果redis當(dāng)前最新的aof和rdb文件都丟失或者損壞了
1)停止redis,刪除appendonly.aof文件和dump.rdb文件
2)修改redis.conf文件,關(guān)閉appendonly no
3)從云端拷貝dump.rdb文件,重啟redis進(jìn)程
4)在redis命令行中,熱修改配置開(kāi)啟aof,config set appendonly yes
5)停掉redis進(jìn)程,修改redis.conf文件,開(kāi)啟aof,appendonly yes
6)重啟redis
轉(zhuǎn)載于:https://www.cnblogs.com/lifeone/p/9329453.html
總結(jié)
以上是生活随笔為你收集整理的redis缓存架构-02-两种持久化机制(RDB和AOF)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spark性能优化:资源调优篇
- 下一篇: oracle 数据库备份恢复