redis持久化:RDB和AOF

好文章:
https://juejin.im/post/5d24a1b4f265da1baf7d126e
https://juejin.im/post/5d776dcef265da03b574744d

一:有哪兩種方式

持久化就是redis把數(shù)據(jù)落到磁盤。持久化方式有RDB、AOF。

二:RDB

1. RDB是通過快照持久化
2. 數(shù)據(jù)完整性

注意噢,redis是把數(shù)據(jù)全部都放在了內(nèi)存里。所以生成快照就不存在數(shù)據(jù)不完整一說了。

3. 觸發(fā)快照的時(shí)間
  • 執(zhí)行save、bgsave命令。
  • 配置文件設(shè)置save <seconds> <changes>規(guī)則,自動(dòng)間隔性執(zhí)行bgsave命令
  • 主從復(fù)制時(shí),從庫全量復(fù)制同步主庫數(shù)據(jù),主庫會(huì)執(zhí)行bgsave
  • 執(zhí)行flushall命令清空服務(wù)器數(shù)據(jù)
  • 執(zhí)行shutdown命令關(guān)閉Redis時(shí),會(huì)執(zhí)行save命令
4.save和bgsave的區(qū)別
  • 使用save命令會(huì)阻塞Redis服務(wù)器進(jìn)程,服務(wù)器進(jìn)程在RDB文件創(chuàng)建完成之前是不能處理任何的命令請求
  • 而使用bgsave命令不同的是,basave命令會(huì)fork一個(gè)子進(jìn)程,然后該子進(jìn)程會(huì)負(fù)責(zé)創(chuàng)建RDB文件,而服務(wù)器進(jìn)程會(huì)繼續(xù)處理命令請求
5. 怎樣設(shè)置bgsave自動(dòng)執(zhí)行
  • 打開配置文件
  • 添加save 900 1,就表示在900s內(nèi),如果有1個(gè)key發(fā)生變化,就會(huì)自動(dòng)觸發(fā)bgsave命令創(chuàng)建快照

三:AOF持久化

AOF持久化會(huì)把被執(zhí)行的寫命令寫到AOF文件的末尾,記錄數(shù)據(jù)的變化。默認(rèn)情況下,Redis是沒有開啟AOF持久化的,開啟后,每執(zhí)行一條更改Redis數(shù)據(jù)的命令,都會(huì)把該命令追加到AOF文件中,這是會(huì)降低Redis的性能,但大部分情況下這個(gè)影響是能夠接受的,另外使用較快的硬盤可以提高AOF的性能。
通過配置redis.conf文件開啟AOF持久化,自己搜一搜。

四:對比(下面的是別的文章的總結(jié))

1. RDB

優(yōu)點(diǎn):
RDB快照是一個(gè)壓縮過的非常緊湊的文件,保存著某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)集,適合做數(shù)據(jù)的備份,災(zāi)難恢復(fù)
可以最大化Redis的性能,在保存RDB文件,服務(wù)器進(jìn)程只需fork一個(gè)子進(jìn)程來完成RDB文件的創(chuàng)建,父進(jìn)程不需要做IO操作
與AOF相比,恢復(fù)大數(shù)據(jù)集的時(shí)候會(huì)更快
缺點(diǎn):
RDB的數(shù)據(jù)安全性是不如AOF的,保存整個(gè)數(shù)據(jù)集的過程是比繁重的,根據(jù)配置可能要幾分鐘才快照一次,如果服務(wù)器宕機(jī),那么就可能丟失幾分鐘的數(shù)據(jù)
Redis數(shù)據(jù)集較大時(shí),fork的子進(jìn)程要完成快照會(huì)比較耗CPU、耗時(shí)

2. AOF

優(yōu)點(diǎn):
數(shù)據(jù)更完整,安全性更高,秒級數(shù)據(jù)丟失(取決fsync策略,如果是everysec,最多丟失1秒的數(shù)據(jù))
AOF文件是一個(gè)只進(jìn)行追加的日志文件,且寫入操作是以Redis協(xié)議的格式保存的,內(nèi)容是可讀的,適合誤刪緊急恢復(fù)
缺點(diǎn):
對于相同的數(shù)據(jù)集,AOF文件的體積要大于RDB文件,數(shù)據(jù)恢復(fù)也會(huì)比較慢
根據(jù)所使用的 fsync 策略,AOF 的速度可能會(huì)慢于 RDB。 不過在一般情況下, 每秒 fsync 的性能依然非常高

3. 如何選擇RDB和AOF
  • 如果是數(shù)據(jù)不那么敏感,且可以從其他地方重新生成補(bǔ)回的,那么可以關(guān)閉持久化
  • 如果是數(shù)據(jù)比較重要,不想再從其他地方獲取,且可以承受數(shù)分鐘的數(shù)據(jù)丟失,比如緩存等,那么可以只使用RDB
  • 如果是用做內(nèi)存數(shù)據(jù)庫,要使用Redis的持久化,建議是RDB和AOF都開啟,或者定期執(zhí)行bgsave做快照備份,RDB方式更適合做數(shù)據(jù)的備份,AOF可以保證數(shù)據(jù)的不丟失
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容